hassium_network/
server.rs1use crate::client::{ClientID, MessageID};
2use core::id::ID;
3use std::ops::Range;
4
5pub type ServerID = ID<()>;
6
7#[derive(Debug, Copy, Clone, PartialEq, Eq)]
8pub enum ServerState {
9 Starting,
10 Open,
11 Closed,
12}
13
14pub trait Server: Send + Sync + Sized {
15 fn open(url: &str) -> Option<Self>;
16
17 fn close(self) -> Self;
18
19 fn id(&self) -> ServerID;
20
21 fn state(&self) -> ServerState;
22
23 fn clients(&self) -> &[ClientID];
24
25 fn disconnect(&mut self, id: ClientID);
26
27 fn disconnect_all(&mut self);
28
29 fn send(&mut self, id: ClientID, msg_id: MessageID, data: &[u8]) -> Option<Range<usize>>;
30
31 fn send_all(&mut self, id: MessageID, data: &[u8]);
32
33 fn read(&mut self) -> Option<(ClientID, MessageID, Vec<u8>)>;
34
35 fn read_all(&mut self) -> Vec<(ClientID, MessageID, Vec<u8>)> {
36 let mut result = vec![];
37 while let Some(msg) = self.read() {
38 result.push(msg);
39 }
40 result
41 }
42
43 fn process(&mut self) {}
44}
45
46impl Server for () {
47 fn open(_: &str) -> Option<Self> {
48 Some(())
49 }
50
51 fn close(self) -> Self {
52 self
53 }
54
55 fn id(&self) -> ServerID {
56 Default::default()
57 }
58
59 fn state(&self) -> ServerState {
60 ServerState::Closed
61 }
62
63 fn clients(&self) -> &[ClientID] {
64 &[]
65 }
66
67 fn disconnect(&mut self, _: ClientID) {}
68
69 fn disconnect_all(&mut self) {}
70
71 fn send(&mut self, _: ClientID, _: MessageID, _: &[u8]) -> Option<Range<usize>> {
72 None
73 }
74
75 fn send_all(&mut self, _: MessageID, _: &[u8]) {}
76
77 fn read(&mut self) -> Option<(ClientID, MessageID, Vec<u8>)> {
78 None
79 }
80
81 fn read_all(&mut self) -> Vec<(ClientID, MessageID, Vec<u8>)> {
82 vec![]
83 }
84}