4 use crate::{ |
4 use crate::{ |
5 protocol::messages::{ |
5 protocol::messages::{ |
6 add_flags, remove_flags, HWProtocolMessage, HWServerMessage::*, ProtocolFlags as Flags, |
6 add_flags, remove_flags, HWProtocolMessage, HWServerMessage::*, ProtocolFlags as Flags, |
7 }, |
7 }, |
8 server::{ |
8 server::{ |
|
9 client::HWClient, |
9 core::HWServer, |
10 core::HWServer, |
10 coretypes::{ClientId, ServerVar}, |
11 coretypes::{ClientId, ServerVar}, |
11 }, |
12 }, |
12 utils::is_name_illegal, |
13 utils::is_name_illegal, |
13 }; |
14 }; |
81 .send_self(), |
82 .send_self(), |
82 ); |
83 ); |
83 } else if room.players_number == u8::max_value() { |
84 } else if room.players_number == u8::max_value() { |
84 response.add(Warning("This room is already full".to_string()).send_self()); |
85 response.add(Warning("This room is already full".to_string()).send_self()); |
85 } else if let Some(room_id) = room_id { |
86 } else if let Some(room_id) = room_id { |
86 let nick = client.nick.clone(); |
87 super::common::enter_room(server, client_id, room_id, response); |
87 server.move_to_room(client_id, room_id); |
|
88 |
|
89 response.add(RoomJoined(vec![nick.clone()]).send_all().in_room(room_id)); |
|
90 response.add(ClientFlags(add_flags(&[Flags::InRoom]), vec![nick]).send_all()); |
|
91 let nicks = server.collect_nicks(|(_, c)| c.room_id == Some(room_id)); |
|
92 response.add(RoomJoined(nicks).send_self()); |
|
93 |
|
94 let room = &server.rooms[room_id]; |
|
95 |
|
96 if !room.greeting.is_empty() { |
|
97 response.add( |
|
98 ChatMsg { |
|
99 nick: "[greeting]".to_string(), |
|
100 msg: room.greeting.clone(), |
|
101 } |
|
102 .send_self(), |
|
103 ); |
|
104 } |
|
105 } |
88 } |
106 } else { |
89 } else { |
107 response.add(Warning("No such room.".to_string()).send_self()); |
90 response.add(Warning("No such room.".to_string()).send_self()); |
|
91 } |
|
92 } |
|
93 Follow(nick) => { |
|
94 if let Some(HWClient { |
|
95 room_id: Some(room_id), |
|
96 .. |
|
97 }) = server.find_client(&nick) |
|
98 { |
|
99 let room = &server.rooms[*room_id]; |
|
100 response.add(Joining(room.name.clone()).send_self()); |
|
101 super::common::enter_room(server, client_id, *room_id, response); |
108 } |
102 } |
109 } |
103 } |
110 SetServerVar(var) => { |
104 SetServerVar(var) => { |
111 if !server.clients[client_id].is_admin() { |
105 if !server.clients[client_id].is_admin() { |
112 response.add(Warning("Access denied.".to_string()).send_self()); |
106 response.add(Warning("Access denied.".to_string()).send_self()); |