--- a/rust/hedgewars-server/src/server/handlers/common.rs Thu Apr 11 21:25:31 2019 +0300
+++ b/rust/hedgewars-server/src/server/handlers/common.rs Fri Apr 12 02:48:16 2019 +0300
@@ -39,15 +39,37 @@
pub fn join_lobby(server: &mut HWServer, response: &mut Response) {
let client_id = response.client_id();
- let lobby_nicks: Vec<_> = server.collect_nicks(|(_, c)| c.room_id.is_none());
+ let client = &server.clients[client_id];
+ let nick = vec![client.nick.clone()];
+ let mut flags = vec![];
+ if client.is_registered() {
+ flags.push(Flags::Registered)
+ }
+ if client.is_admin() {
+ flags.push(Flags::Admin)
+ }
+ if client.is_contributor() {
+ flags.push(Flags::Contributor)
+ }
- let joined_msg = LobbyJoined(lobby_nicks);
+ let all_nicks: Vec<_> = server.collect_nicks(|_| true);
- let everyone_msg = LobbyJoined(vec![server.clients[client_id].nick.clone()]);
- let flags_msg = ClientFlags(
- add_flags(&[Flags::InRoom]),
- server.collect_nicks(|(_, c)| c.room_id.is_some()),
- );
+ let mut flag_selectors = [
+ (
+ Flags::Registered,
+ server.collect_nicks(|(_, c)| c.is_registered()),
+ ),
+ (Flags::Admin, server.collect_nicks(|(_, c)| c.is_admin())),
+ (
+ Flags::Contributor,
+ server.collect_nicks(|(_, c)| c.is_contributor()),
+ ),
+ (
+ Flags::InRoom,
+ server.collect_nicks(|(_, c)| c.room_id.is_some()),
+ ),
+ ];
+
let server_msg = ServerMessage(server.get_greetings(client_id).to_string());
let rooms_msg = Rooms(
@@ -58,9 +80,18 @@
.collect(),
);
- response.add(everyone_msg.send_all().but_self());
- response.add(joined_msg.send_self());
- response.add(flags_msg.send_self());
+ response.add(LobbyJoined(nick).send_all().but_self());
+ response.add(
+ ClientFlags(add_flags(&flags), all_nicks.clone())
+ .send_all()
+ .but_self(),
+ );
+
+ response.add(LobbyJoined(all_nicks).send_self());
+ for (flag, nicks) in &mut flag_selectors {
+ response.add(ClientFlags(add_flags(&[*flag]), replace(nicks, vec![])).send_self());
+ }
+
response.add(server_msg.send_self());
response.add(rooms_msg.send_self());
}