diff -r 0eedc17055a0 -r cdf69667593b gameServer2/src/server/handlers/inroom.rs --- a/gameServer2/src/server/handlers/inroom.rs Thu Jun 14 16:44:27 2018 -0400 +++ b/gameServer2/src/server/handlers/inroom.rs Mon Jun 18 09:22:53 2018 -0400 @@ -1,13 +1,52 @@ use mio; -use server::server::HWServer; -use server::actions::Action; -use server::actions::Action::*; -use protocol::messages::HWProtocolMessage; -use protocol::messages::HWServerMessage::*; +use server::{ + server::HWServer, + actions::{Action, Action::*} +}; +use protocol::messages::{ + HWProtocolMessage, + HWServerMessage::* +}; +use utils::is_name_illegal; +use std::mem::swap; pub fn handle(server: &mut HWServer, token: usize, message: HWProtocolMessage) { + use protocol::messages::HWProtocolMessage::*; match message { + Part(None) => server.react(token, vec![ + MoveToLobby("part".to_string())]), + Part(Some(msg)) => server.react(token, vec![ + MoveToLobby(format!("part: {}", msg))]), + Chat(msg) => { + let chat_msg; + let room_id; + { + let c = &mut server.clients[token]; + chat_msg = ChatMsg(c.nick.clone(), msg); + room_id = c.room_id; + } + let client_ids = server.other_clients_in_room(token); + server.react(token, vec![ + SendToSelected(client_ids, chat_msg)]); + }, + RoomName(new_name) => { + let actions = + if is_name_illegal(&new_name) { + vec![Warn("Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}".to_string())] + } else if server.has_room(&new_name) { + vec![Warn("A room with the same name already exists.".to_string())] + } else { + let mut old_name = new_name.clone(); + if let (c, Some(r)) = server.client_and_room(token) { + swap(&mut r.name, &mut old_name); + vec![SendRoomUpdate(Some(old_name))] + } else { + Vec::new() + } + }; + server.react(token, actions); + } _ => warn!("Unimplemented!"), } }