--- 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!"),
}
}