pub trait Server: Send + Sync + Sized {
fn open(url: &str) -> Option<Self>;
fn close(self) -> Self;
fn id(&self) -> ServerId;
fn state(&self) -> ServerState;
fn clients(&self) -> &[ClientId];
fn disconnect(&mut self, id: ClientId);
fn disconnect_all(&mut self);
fn send(
&mut self,
id: ClientId,
msg_id: MessageId,
data: &[u8]
) -> Option<Range<usize>>;
fn send_all(&mut self, id: MessageId, data: &[u8]);
fn read(&mut self) -> Option<(ClientId, MessageId, Vec<u8>)>;
fn read_all(&mut self) -> Vec<(ClientId, MessageId, Vec<u8>)> { ... }
fn process(&mut self) { ... }
}