132 RoomJoined(vec![nick.clone()]) |
132 RoomJoined(vec![nick.clone()]) |
133 .send_all() |
133 .send_all() |
134 .in_room(room.id) |
134 .in_room(room.id) |
135 .but_self(), |
135 .but_self(), |
136 ); |
136 ); |
137 response.add(ClientFlags(add_flags(&[Flags::InRoom]), vec![nick]).send_all()); |
137 response.add(ClientFlags(add_flags(&[Flags::InRoom]), vec![nick.clone()]).send_all()); |
138 let nicks = room_clients.clone().map(|c| c.nick.clone()).collect(); |
138 let nicks = room_clients.clone().map(|c| c.nick.clone()).collect(); |
139 response.add(RoomJoined(nicks).send_self()); |
139 response.add(RoomJoined(nicks).send_self()); |
140 |
|
141 get_room_teams(room, client.id, response); |
|
142 get_room_config(room, client.id, response); |
|
143 |
140 |
144 let mut flag_selectors = [ |
141 let mut flag_selectors = [ |
145 ( |
142 ( |
146 Flags::RoomMaster, |
143 Flags::RoomMaster, |
147 partition_nicks(room_clients.clone(), |c| c.is_master()), |
144 partition_nicks(room_clients.clone(), |c| c.is_master()), |
166 ClientFlags(remove_flags(&[*flag]), replace(cleared_nicks, vec![])).send_self(), |
163 ClientFlags(remove_flags(&[*flag]), replace(cleared_nicks, vec![])).send_self(), |
167 ); |
164 ); |
168 } |
165 } |
169 } |
166 } |
170 |
167 |
|
168 get_room_teams(room, client.id, response); |
|
169 get_room_config(room, client.id, response); |
|
170 |
171 if !room.greeting.is_empty() { |
171 if !room.greeting.is_empty() { |
172 response.add( |
172 response.add( |
173 ChatMsg { |
173 ChatMsg { |
174 nick: "[greeting]".to_string(), |
174 nick: "[greeting]".to_string(), |
175 msg: room.greeting.clone(), |
175 msg: room.greeting.clone(), |
176 } |
176 } |
177 .send_self(), |
177 .send_self(), |
178 ); |
178 ); |
|
179 } |
|
180 |
|
181 if let Some(info) = &room.game_info { |
|
182 response.add( |
|
183 ClientFlags(add_flags(&[Flags::Ready, Flags::InGame]), vec![nick]) |
|
184 .send_all() |
|
185 .in_room(room.id), |
|
186 ); |
|
187 response.add(RunGame.send_self()); |
|
188 |
|
189 response.add( |
|
190 ForwardEngineMessage( |
|
191 once(to_engine_msg("e$spectate 1".bytes())) |
|
192 .chain(info.msg_log.iter().cloned()) |
|
193 .collect(), |
|
194 ) |
|
195 .send_self(), |
|
196 ); |
|
197 |
|
198 for team in info.client_teams(client.id) { |
|
199 response.add( |
|
200 ForwardEngineMessage(vec![to_engine_msg(once(b'G').chain(team.name.bytes()))]) |
|
201 .send_all() |
|
202 .in_room(room.id), |
|
203 ); |
|
204 } |
|
205 |
|
206 if info.is_paused { |
|
207 response.add(ForwardEngineMessage(vec![to_engine_msg(once(b'I'))]).send_self()); |
|
208 } |
179 } |
209 } |
180 } |
210 } |
181 |
211 |
182 pub fn get_room_join_error(error: JoinRoomError, response: &mut Response) { |
212 pub fn get_room_join_error(error: JoinRoomError, response: &mut Response) { |
183 use super::strings::*; |
213 use super::strings::*; |