From c232855047dec95696d9eaed40ff65582a1e00a4 Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Thu, 7 Apr 2016 18:17:10 +0200 Subject: [PATCH] Handle UserJoinedRoomResponse correctly. --- src/client.rs | 20 +++++++++++++++++--- src/proto/server/response.rs | 12 ++++++------ src/room.rs | 8 ++++---- src/user.rs | 4 ++-- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/client.rs b/src/client.rs index 36d435e..51d0f20 100644 --- a/src/client.rs +++ b/src/client.rs @@ -232,6 +232,9 @@ impl Client { ServerResponse::RoomListResponse(response) => self.handle_room_list_response(response), + ServerResponse::UserJoinedRoomResponse(response) => + self.handle_user_joined_room_response(response), + ServerResponse::UnknownResponse(code) => warn!("Unknown response: code {}", code), @@ -266,9 +269,11 @@ impl Client { room.membership = room::Membership::Member; room.user_count = response.users.len(); room.owner = response.owner; - room.operators = response.operators; - for &(ref name, _) in response.users.iter() { - room.members.push(name.clone()); + for user_name in response.operators.drain(..) { + room.operators.insert(user_name.clone()); + } + for &(ref user_name, _) in response.users.iter() { + room.members.insert(user_name.clone()); } // Then update the user structs based on the info we just got. @@ -322,4 +327,13 @@ impl Client { { self.users.update_privileges(response); } + + fn handle_user_joined_room_response( + &mut self, mut response: UserJoinedRoomResponse) + { + if let Some(room) = self.rooms.get_mut(&response.room_name) { + room.members.insert(response.user_name.clone()); + self.users.insert(response.user_name, response.user); + } + } } diff --git a/src/proto/server/response.rs b/src/proto/server/response.rs index c8a1930..a513301 100644 --- a/src/proto/server/response.rs +++ b/src/proto/server/response.rs @@ -170,7 +170,7 @@ impl FromPacket for JoinRoomResponse { num_files: 0, num_folders: 0, num_free_slots: 0, - country: None, + country: String::new(), }; Ok((name, user)) }); @@ -226,7 +226,7 @@ impl JoinRoomResponse { let num_countries_res: result::Result = packet.read_array_with(|packet, i| { if let Some(&mut (_, ref mut user)) = self.users.get_mut(i) { - user.country = Some(try!(packet.read_str())); + user.country = try!(packet.read_str()); } Ok(()) }); @@ -454,9 +454,9 @@ impl RoomListResponse { #[derive(Debug)] pub struct UserJoinedRoomResponse { - room_name: String, - user_name: String, - user: user::User, + pub room_name: String, + pub user_name: String, + pub user: user::User, } impl FromPacket for UserJoinedRoomResponse { @@ -487,7 +487,7 @@ impl FromPacket for UserJoinedRoomResponse { num_files: num_files, num_folders: num_folders, num_free_slots: num_free_slots, - country: Some(country), + country: country, } }) } diff --git a/src/room.rs b/src/room.rs index d2e3e78..f372a57 100644 --- a/src/room.rs +++ b/src/room.rs @@ -48,9 +48,9 @@ pub struct Room { /// The name of the room's owner, if any. pub owner: Option, /// The names of the room's operators. - pub operators: Vec, + pub operators: collections::HashSet, /// The names of the room's members. - pub members: Vec, + pub members: collections::HashSet, } impl Room { @@ -62,8 +62,8 @@ impl Room { operated: false, user_count: user_count, owner: None, - operators: Vec::new(), - members: Vec::new(), + operators: collections::HashSet::new(), + members: collections::HashSet::new(), } } diff --git a/src/user.rs b/src/user.rs index 356cd28..4bff9db 100644 --- a/src/user.rs +++ b/src/user.rs @@ -56,8 +56,8 @@ pub struct User { pub num_folders: usize, /// The number of free download slots of this user. pub num_free_slots: usize, - /// The user's country code. If unknown, set to None. - pub country: Option, + /// The user's country code. + pub country: String, } /// Contains the mapping from user names to user data and provides a clean