# HG changeset patch # User alfadur # Date 1577756540 -10800 # Node ID 3f6a7a867040cf53f60e76936eb76cc3ba8cc3b2 # Parent bb93e9642b5b088e47facdb0b512d95b23845df1 add back em response on joining a game in progress diff -r bb93e9642b5b -r 3f6a7a867040 rust/hedgewars-server/src/handlers/common.rs --- 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) {