gameServer2/src/server/actions.rs
changeset 12147 03ccb89820f3
parent 12146 8d8fb85bc09c
child 12148 8591375271b8
equal deleted inserted replaced
12146:8d8fb85bc09c 12147:03ccb89820f3
     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 }