--- a/rust/hedgewars-server/src/handlers/common.rs Mon Dec 30 17:25:44 2019 +0300
+++ b/rust/hedgewars-server/src/handlers/common.rs Tue Dec 31 04:42:20 2019 +0300
@@ -134,13 +134,10 @@
.in_room(room.id)
.but_self(),
);
- response.add(ClientFlags(add_flags(&[Flags::InRoom]), vec![nick]).send_all());
+ response.add(ClientFlags(add_flags(&[Flags::InRoom]), vec![nick.clone()]).send_all());
let nicks = room_clients.clone().map(|c| c.nick.clone()).collect();
response.add(RoomJoined(nicks).send_self());
- get_room_teams(room, client.id, response);
- get_room_config(room, client.id, response);
-
let mut flag_selectors = [
(
Flags::RoomMaster,
@@ -168,6 +165,9 @@
}
}
+ get_room_teams(room, client.id, response);
+ get_room_config(room, client.id, response);
+
if !room.greeting.is_empty() {
response.add(
ChatMsg {
@@ -177,6 +177,36 @@
.send_self(),
);
}
+
+ if let Some(info) = &room.game_info {
+ response.add(
+ ClientFlags(add_flags(&[Flags::Ready, Flags::InGame]), vec![nick])
+ .send_all()
+ .in_room(room.id),
+ );
+ response.add(RunGame.send_self());
+
+ response.add(
+ ForwardEngineMessage(
+ once(to_engine_msg("e$spectate 1".bytes()))
+ .chain(info.msg_log.iter().cloned())
+ .collect(),
+ )
+ .send_self(),
+ );
+
+ for team in info.client_teams(client.id) {
+ response.add(
+ ForwardEngineMessage(vec![to_engine_msg(once(b'G').chain(team.name.bytes()))])
+ .send_all()
+ .in_room(room.id),
+ );
+ }
+
+ if info.is_paused {
+ response.add(ForwardEngineMessage(vec![to_engine_msg(once(b'I'))]).send_self());
+ }
+ }
}
pub fn get_room_join_error(error: JoinRoomError, response: &mut Response) {