7 use utils; |
7 use utils; |
8 use server::client::HWClient; |
8 use server::client::HWClient; |
9 use server::actions::Action; |
9 use server::actions::Action; |
10 use server::actions::Action::*; |
10 use server::actions::Action::*; |
11 use protocol::messages::HWProtocolMessage::*; |
11 use protocol::messages::HWProtocolMessage::*; |
|
12 use protocol::messages::HWServerMessage; |
12 |
13 |
13 type Slab<T> = slab::Slab<T, Token>; |
14 type Slab<T> = slab::Slab<T, Token>; |
14 |
15 |
15 pub struct HWServer { |
16 pub struct HWServer { |
16 listener: TcpListener, |
17 listener: TcpListener, |
88 for action in actions { |
89 for action in actions { |
89 match action { |
90 match action { |
90 SendMe(msg) => self.send(token, &msg), |
91 SendMe(msg) => self.send(token, &msg), |
91 ByeClient(msg) => { |
92 ByeClient(msg) => { |
92 self.react(token, poll, vec![ |
93 self.react(token, poll, vec![ |
93 SendMe(Bye(&msg).to_raw_protocol()), |
94 SendMe(HWServerMessage::Bye(&msg).to_raw_protocol()), |
94 RemoveClient, |
95 RemoveClient, |
95 ]); |
96 ]); |
96 }, |
97 }, |
97 SetNick(nick) => { |
|
98 self.send(token, &Nick(&nick).to_raw_protocol()); |
|
99 self.clients[token].nick = nick; |
|
100 } |
|
101 RemoveClient => { |
98 RemoveClient => { |
102 self.clients[token].deregister(poll); |
99 self.clients[token].deregister(poll); |
103 self.clients.remove(token); |
100 self.clients.remove(token); |
104 }, |
101 }, |
|
102 ReactProtocolMessage(msg) => match msg { |
|
103 Ping => self.react(token, poll, vec![SendMe(HWServerMessage::Pong.to_raw_protocol())]), |
|
104 Quit(Some(msg)) => self.react(token, poll, vec![ByeClient("User quit: ".to_string() + &msg)]), |
|
105 Quit(None) => self.react(token, poll, vec![ByeClient("User quit".to_string())]), |
|
106 Nick(nick) => if self.clients[token].nick.len() == 0 { |
|
107 self.send(token, &HWServerMessage::Nick(&nick).to_raw_protocol()); |
|
108 self.clients[token].nick = nick; |
|
109 }, |
|
110 Malformed => warn!("Malformed/unknown message"), |
|
111 Empty => warn!("Empty message"), |
|
112 _ => unimplemented!(), |
|
113 } |
105 //_ => unimplemented!(), |
114 //_ => unimplemented!(), |
106 } |
115 } |
107 } |
116 } |
108 } |
117 } |
109 } |
118 } |