From 538578233ffeafd34e930d600f292ea12e25fec5 Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Sun, 5 Jun 2016 19:11:11 +0200 Subject: [PATCH] Add UserListRequest and RoomLeaveResponse struct. --- src/client.rs | 17 ++++++++++++++++- src/control/request.rs | 2 ++ src/control/response.rs | 14 +++++++++++++- src/user.rs | 10 ++++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/client.rs b/src/client.rs index e8c2c21..99d335d 100644 --- a/src/client.rs +++ b/src/client.rs @@ -225,6 +225,9 @@ impl Client { control::Request::RoomMessageRequest(request) => self.handle_room_message_request(request), + control::Request::UserListRequest => + self.handle_user_list_request(), + /* _ =>{ error!("Unhandled control request: {:?}", request); @@ -311,6 +314,16 @@ impl Client { )); } + fn handle_user_list_request(&mut self) { + // Send the controller client what we have in memory. + let user_list = self.users.get_list(); + self.send_to_controller(control::Response::UserListResponse( + control::UserListResponse { + user_list: user_list + } + )); + } + /*=========================* * PROTO RESPONSE HANDLING * *=========================*/ @@ -596,7 +609,9 @@ impl Client { } self.send_to_controller(control::Response::RoomLeaveResponse( - response.room_name + control::RoomLeaveResponse { + room_name: response.room_name + } )); } diff --git a/src/control/request.rs b/src/control/request.rs index 449a0f5..5518cba 100644 --- a/src/control/request.rs +++ b/src/control/request.rs @@ -12,6 +12,8 @@ pub enum Request { RoomListRequest, /// The controller wants to send a message to a chat room. RoomMessageRequest(RoomMessageRequest), + /// The controller wants to know the list of known users. + UserListRequest, } /// This structure contains the chat room message request from the controller. diff --git a/src/control/response.rs b/src/control/response.rs index 521b112..0f051f2 100644 --- a/src/control/response.rs +++ b/src/control/response.rs @@ -7,12 +7,13 @@ use user; pub enum Response { LoginStatusResponse(LoginStatusResponse), RoomJoinResponse(RoomJoinResponse), - RoomLeaveResponse(String), + RoomLeaveResponse(RoomLeaveResponse), RoomListResponse(RoomListResponse), RoomMessageResponse(RoomMessageResponse), RoomUserJoinedResponse(RoomUserJoinedResponse), RoomUserLeftResponse(RoomUserLeftResponse), UserInfoResponse(UserInfoResponse), + UserListResponse(UserListResponse), } #[derive(Debug, RustcEncodable, RustcDecodable)] @@ -20,6 +21,11 @@ pub struct RoomJoinResponse { pub room_name: String, } +#[derive(Debug, RustcEncodable, RustcDecodable)] +pub struct RoomLeaveResponse { + pub room_name: String, +} + /// This enumeration is the list of possible login states, and the associated /// information. #[derive(Debug, RustcDecodable, RustcEncodable)] @@ -88,3 +94,9 @@ pub struct UserInfoResponse { pub user_name: String, pub user_info: user::User, } + +/// This stuct contains the last known information about every user. +#[derive(Debug, RustcDecodable, RustcEncodable)] +pub struct UserListResponse { + pub user_list: Vec<(String, user::User)>, +} diff --git a/src/user.rs b/src/user.rs index 6df4296..195733e 100644 --- a/src/user.rs +++ b/src/user.rs @@ -148,6 +148,16 @@ impl UserMap { } } + /// Returns the list of (user name, user data) representing all known users. + pub fn get_list(&self) -> Vec<(String, User)> + { + let mut users = Vec::new(); + for (user_name, user_data) in self.map.iter() { + users.push((user_name.clone(), user_data.clone())); + } + users + } + /// Sets the set of privileged users to the given list. pub fn set_all_privileged(&mut self, mut users: Vec) {