From c65910a221b547d6a66ff3a0132e763c3e9eca9a Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Sun, 8 May 2016 18:41:22 +0200 Subject: [PATCH] Notify controller when users join/leave rooms. --- src/client.rs | 29 ++++++++++++++++++----------- src/control/response.rs | 16 ++++++++++++++++ 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/client.rs b/src/client.rs index ea31011..2172c55 100644 --- a/src/client.rs +++ b/src/client.rs @@ -416,13 +416,16 @@ impl Client { let result = self.rooms.insert_member( &response.room_name, response.user_name.clone() ); - match result { - Ok(()) => { - self.users.insert(response.user_name, response.user); - // TODO send control response - }, - Err(err) => error!("RoomUserJoinedResponse: {}", err) + if let Err(err) = result { + error!("RoomUserJoinedResponse: {}", err); + return } + self.send_to_controller(control::Response::RoomUserJoinedResponse( + control::RoomUserJoinedResponse { + room_name: response.room_name, + user_name: response.user_name, + } + )); } fn handle_room_user_left_response( @@ -431,12 +434,16 @@ impl Client { let result = self.rooms.remove_member( &response.room_name, &response.user_name ); - match result { - Ok(()) => { - // TODO send control response - }, - Err(err) => error!("RoomUserLeftResponse: {}", err) + if let Err(err) = result { + error!("RoomUserLeftResponse: {}", err); + return } + self.send_to_controller(control::Response::RoomUserLeftResponse( + control::RoomUserLeftResponse { + room_name: response.room_name, + user_name: response.user_name, + } + )); } fn handle_user_info_response(&mut self, response: UserInfoResponse) { diff --git a/src/control/response.rs b/src/control/response.rs index 5b51966..521b112 100644 --- a/src/control/response.rs +++ b/src/control/response.rs @@ -10,6 +10,8 @@ pub enum Response { RoomLeaveResponse(String), RoomListResponse(RoomListResponse), RoomMessageResponse(RoomMessageResponse), + RoomUserJoinedResponse(RoomUserJoinedResponse), + RoomUserLeftResponse(RoomUserLeftResponse), UserInfoResponse(UserInfoResponse), } @@ -66,6 +68,20 @@ pub struct RoomMessageResponse { pub message: String, } +/// This struct describes the fact that the given user joined the given room. +#[derive(Debug, RustcDecodable, RustcEncodable)] +pub struct RoomUserJoinedResponse { + pub room_name: String, + pub user_name: String, +} + +/// This struct describes the fact that the given user left the given room. +#[derive(Debug, RustcDecodable, RustcEncodable)] +pub struct RoomUserLeftResponse { + pub room_name: String, + pub user_name: String, +} + /// This struct contains the last known information about a given user. #[derive(Debug, RustcDecodable, RustcEncodable)] pub struct UserInfoResponse {