From f0a205a49b821b4ba40ccec421ec8731a501ab0c Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Thu, 7 Apr 2016 16:40:24 +0200 Subject: [PATCH] Add UserJoinedRoomResponse, still unhandled. --- src/proto/server/constants.rs | 1 + src/proto/server/response.rs | 57 +++++++++++++++++++++++++++++++++-- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/src/proto/server/constants.rs b/src/proto/server/constants.rs index 60ada70..6728560 100644 --- a/src/proto/server/constants.rs +++ b/src/proto/server/constants.rs @@ -2,6 +2,7 @@ pub const CODE_LOGIN: u32 = 1; pub const CODE_SET_LISTEN_PORT: u32 = 2; pub const CODE_PEER_ADDRESS: u32 = 3; pub const CODE_JOIN_ROOM: u32 = 14; +pub const CODE_USER_JOINED_ROOM: u32 = 16; pub const CODE_CONNECT_TO_PEER: u32 = 18; pub const CODE_ROOM_LIST: u32 = 64; pub const CODE_PRIVILEGED_USERS: u32 = 69; diff --git a/src/proto/server/response.rs b/src/proto/server/response.rs index 88d9615..c8a1930 100644 --- a/src/proto/server/response.rs +++ b/src/proto/server/response.rs @@ -27,6 +27,7 @@ pub enum ServerResponse { PeerAddressResponse(PeerAddressResponse), PrivilegedUsersResponse(PrivilegedUsersResponse), RoomListResponse(RoomListResponse), + UserJoinedRoomResponse(UserJoinedRoomResponse), WishlistIntervalResponse(WishlistIntervalResponse), // Unknown purpose @@ -70,6 +71,11 @@ impl FromPacket for ServerResponse { try!(RoomListResponse::from_packet(packet)) ), + CODE_USER_JOINED_ROOM => + ServerResponse::UserJoinedRoomResponse( + try!(UserJoinedRoomResponse::from_packet(packet)) + ), + CODE_WISHLIST_INTERVAL => ServerResponse::WishlistIntervalResponse( try!(WishlistIntervalResponse::from_packet(packet)) @@ -425,8 +431,10 @@ impl RoomListResponse { let num_user_counts_res: result::Result = packet.read_array_with(|packet, i| { - let user_count = try!(packet.read_uint()); - rooms[original_rooms_len+i].1 = user_count; + let index = original_rooms_len + i; + if let Some(&mut (_, ref mut count)) = rooms.get_mut(index) { + *count = try!(packet.read_uint()); + } Ok(()) }); let num_user_counts = try!(num_user_counts_res); @@ -440,6 +448,51 @@ impl RoomListResponse { } } +/*==================* + * USER JOINED ROOM * + *==================*/ + +#[derive(Debug)] +pub struct UserJoinedRoomResponse { + room_name: String, + user_name: String, + user: user::User, +} + +impl FromPacket for UserJoinedRoomResponse { + fn from_packet(packet: &mut Packet) -> result::Result { + let room_name = try!(packet.read_str()); + let user_name = try!(packet.read_str()); + + let status_u32 = try!(packet.read_uint()); + let status = try!(user::Status::from_u32(status_u32)); + + let average_speed = try!(packet.read_uint()) as usize; + let num_downloads = try!(packet.read_uint()) as usize; + let unknown = try!(packet.read_uint()) as usize; + let num_files = try!(packet.read_uint()) as usize; + let num_folders = try!(packet.read_uint()) as usize; + let num_free_slots = try!(packet.read_uint()) as usize; + + let country = try!(packet.read_str()); + + Ok(UserJoinedRoomResponse { + room_name: room_name, + user_name: user_name, + user: user::User { + status: status, + average_speed: average_speed, + num_downloads: num_downloads, + unknown: unknown, + num_files: num_files, + num_folders: num_folders, + num_free_slots: num_free_slots, + country: Some(country), + } + }) + } +} + /*===================* * WISHLIST INTERVAL * *===================*/