equal
deleted
inserted
replaced
1 use mio; |
1 use mio; |
2 use std::io::Write; |
2 use std::io::Write; |
3 use std::io; |
3 use std::io; |
4 |
4 |
5 use super::server::HWServer; |
5 use super::server::HWServer; |
|
6 use super::server::HWRoom; |
6 use protocol::messages::HWProtocolMessage; |
7 use protocol::messages::HWProtocolMessage; |
7 use protocol::messages::HWServerMessage::*; |
8 use protocol::messages::HWServerMessage::*; |
8 use super::handlers; |
9 use super::handlers; |
9 |
10 |
10 pub enum Action { |
11 pub enum Action { |
13 RemoveClient, |
14 RemoveClient, |
14 ByeClient(String), |
15 ByeClient(String), |
15 ReactProtocolMessage(HWProtocolMessage), |
16 ReactProtocolMessage(HWProtocolMessage), |
16 CheckRegistered, |
17 CheckRegistered, |
17 JoinLobby, |
18 JoinLobby, |
|
19 AddRoom(String, Option<String>), |
|
20 Warn(String), |
18 } |
21 } |
19 |
22 |
20 use self::Action::*; |
23 use self::Action::*; |
21 |
24 |
22 pub fn run_action(server: &mut HWServer, token: mio::Token, poll: &mio::Poll, action: Action) { |
25 pub fn run_action(server: &mut HWServer, token: mio::Token, poll: &mio::Poll, action: Action) { |
47 server.react(token, poll, vec![ |
50 server.react(token, poll, vec![ |
48 JoinLobby, |
51 JoinLobby, |
49 ]); |
52 ]); |
50 }, |
53 }, |
51 JoinLobby => { |
54 JoinLobby => { |
|
55 server.clients[token].room_id = Some(server.lobby_id); |
|
56 |
52 let joined_msg; |
57 let joined_msg; |
53 { |
58 { |
54 let mut lobby_nicks: Vec<&str> = Vec::new(); |
59 let mut lobby_nicks: Vec<&str> = Vec::new(); |
55 for c in server.clients.iter() { |
60 for c in server.clients.iter() { |
56 if c.room_id.is_some() { |
61 if c.room_id.is_some() { |
58 } |
63 } |
59 } |
64 } |
60 joined_msg = LobbyJoined(&lobby_nicks).to_raw_protocol(); |
65 joined_msg = LobbyJoined(&lobby_nicks).to_raw_protocol(); |
61 } |
66 } |
62 let everyone_msg = LobbyJoined(&[&server.clients[token].nick]).to_raw_protocol(); |
67 let everyone_msg = LobbyJoined(&[&server.clients[token].nick]).to_raw_protocol(); |
63 server.clients[token].room_id = Some(server.lobby_id); |
|
64 server.react(token, poll, vec![ |
68 server.react(token, poll, vec![ |
65 SendAllButMe(everyone_msg), |
69 SendAllButMe(everyone_msg), |
66 SendMe(joined_msg), |
70 SendMe(joined_msg), |
67 ]); |
71 ]); |
68 }, |
72 }, |
|
73 AddRoom(name, password) => { |
|
74 let room_id = server.rooms.insert(HWRoom::new()).ok().expect("Cannot add room"); |
|
75 let r = &mut server.rooms[room_id]; |
|
76 r.name = name; |
|
77 r.password = password; |
|
78 r.id = room_id.clone(); |
|
79 r.ready_players_number = 1; |
|
80 server.clients[token].room_id = Some(room_id); |
|
81 }, |
|
82 Warn(msg) => { |
|
83 run_action(server, token, poll, SendMe(Warning(&msg).to_raw_protocol())); |
|
84 } |
69 //_ => unimplemented!(), |
85 //_ => unimplemented!(), |
70 } |
86 } |
71 } |
87 } |