125 } |
125 } |
126 RoomName(new_name) => { |
126 RoomName(new_name) => { |
127 let actions = |
127 let actions = |
128 if is_name_illegal(&new_name) { |
128 if is_name_illegal(&new_name) { |
129 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())] |
129 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())] |
130 } else if server.room(client_id).map(|r| r.is_fixed()).unwrap_or(false) { |
130 } else if server.rooms[room_id].is_fixed() { |
131 vec![Warn("Access denied.".to_string())] |
131 vec![Warn("Access denied.".to_string())] |
132 } else if server.has_room(&new_name) { |
132 } else if server.has_room(&new_name) { |
133 vec![Warn("A room with the same name already exists.".to_string())] |
133 vec![Warn("A room with the same name already exists.".to_string())] |
134 } else { |
134 } else { |
135 let mut old_name = new_name.clone(); |
135 let mut old_name = new_name.clone(); |
136 if let (_, Some(r)) = server.client_and_room(client_id) { |
136 swap(&mut server.rooms[room_id].name, &mut old_name); |
137 swap(&mut r.name, &mut old_name); |
137 vec![SendRoomUpdate(Some(old_name))] |
138 vec![SendRoomUpdate(Some(old_name))] |
|
139 } else { |
|
140 Vec::new() |
|
141 } |
|
142 }; |
138 }; |
143 server.react(client_id, actions); |
139 server.react(client_id, actions); |
144 }, |
140 }, |
145 ToggleReady => { |
141 ToggleReady => { |
146 let actions = if let (c, Some(r)) = server.client_and_room(client_id) { |
142 let actions = if let (c, Some(r)) = server.client_and_room(client_id) { |
319 }; |
315 }; |
320 match error { |
316 match error { |
321 None => { |
317 None => { |
322 let msg = voting_description(&kind); |
318 let msg = voting_description(&kind); |
323 let voting = Voting::new(kind, server.room_clients(client_id)); |
319 let voting = Voting::new(kind, server.room_clients(client_id)); |
324 server.room(client_id).unwrap().voting = Some(voting); |
320 server.rooms[room_id].voting = Some(voting); |
325 server.react(client_id, vec![ |
321 server.react(client_id, vec![ |
326 server_chat(&msg).send_all().in_room(room_id).action(), |
322 server_chat(&msg).send_all().in_room(room_id).action(), |
327 AddVote{ vote: true, is_forced: false}]); |
323 AddVote{ vote: true, is_forced: false}]); |
328 } |
324 } |
329 Some(msg) => { |
325 Some(msg) => { |
331 server_chat(msg).send_self().action()]) |
327 server_chat(msg).send_self().action()]) |
332 } |
328 } |
333 } |
329 } |
334 } |
330 } |
335 Vote(vote) => { |
331 Vote(vote) => { |
336 let actions = if let (c, Some(r)) = server.client_and_room(client_id) { |
332 server.react(client_id, vec![AddVote{ vote, is_forced: false }]); |
337 vec![AddVote{ vote, is_forced: false }] |
|
338 } else { |
|
339 Vec::new() |
|
340 }; |
|
341 server.react(client_id, actions); |
|
342 } |
333 } |
343 ForceVote(vote) => { |
334 ForceVote(vote) => { |
344 let actions = if let (c, Some(r)) = server.client_and_room(client_id) { |
335 let is_forced = server.clients[client_id].is_admin(); |
345 vec![AddVote{ vote, is_forced: c.is_admin()} ] |
336 server.react(client_id, vec![AddVote{ vote, is_forced }]); |
346 } else { |
|
347 Vec::new() |
|
348 }; |
|
349 server.react(client_id, actions); |
|
350 } |
337 } |
351 ToggleRestrictJoin | ToggleRestrictTeams | ToggleRegisteredOnly => { |
338 ToggleRestrictJoin | ToggleRestrictTeams | ToggleRegisteredOnly => { |
352 if server.clients[client_id].is_master() { |
339 if server.clients[client_id].is_master() { |
353 server.rooms[room_id].flags.toggle(room_message_flag(&message)); |
340 server.rooms[room_id].flags.toggle(room_message_flag(&message)); |
354 } |
341 } |
355 server.react(client_id, vec![SendRoomUpdate(None)]); |
342 server.react(client_id, vec![SendRoomUpdate(None)]); |
356 } |
343 } |
357 StartGame => { |
344 StartGame => { |
358 let actions = if let (_, Some(r)) = server.client_and_room(client_id) { |
345 server.react(client_id, vec![StartRoomGame(room_id)]); |
359 vec![StartRoomGame(r.id)] |
|
360 } else { |
|
361 Vec::new() |
|
362 }; |
|
363 server.react(client_id, actions); |
|
364 } |
346 } |
365 EngineMessage(em) => { |
347 EngineMessage(em) => { |
366 let mut actions = Vec::new(); |
348 let mut actions = Vec::new(); |
367 if let (c, Some(r)) = server.client_and_room(client_id) { |
349 if let (c, Some(r)) = server.client_and_room(client_id) { |
368 if c.teams_in_game > 0 { |
350 if c.teams_in_game > 0 { |