diff --git a/src/client.rs b/src/client.rs index 51d0f20..1f08932 100644 --- a/src/client.rs +++ b/src/client.rs @@ -127,14 +127,17 @@ impl Client { self.controller_connected = false; }, + control::Request::JoinRoomRequest(room_name) => + self.handle_join_room_request(room_name), + control::Request::LoginStatusRequest => self.handle_login_status_request(), control::Request::RoomListRequest => self.handle_room_list_request(), - control::Request::JoinRoomRequest(room_name) => - self.handle_join_room_request(room_name), + control::Request::SayRoomRequest(request) => + self.handle_say_room_request(request), /* _ =>{ @@ -214,6 +217,15 @@ impl Client { self.server_send(ServerRequest::RoomListRequest); } + fn handle_say_room_request( + &mut self, request: control::SayRoomRequest) + { + self.server_send(ServerRequest::SayRoomRequest(SayRoomRequest { + room_name: request.room_name, + message: request.message, + })); + } + /*==========================* * SERVER RESPONSE HANDLING * *==========================*/ @@ -232,6 +244,9 @@ impl Client { ServerResponse::RoomListResponse(response) => self.handle_room_list_response(response), + ServerResponse::SayRoomResponse(response) => + self.handle_say_room_response(response), + ServerResponse::UserJoinedRoomResponse(response) => self.handle_user_joined_room_response(response), @@ -314,18 +329,29 @@ impl Client { } } + fn handle_privileged_users_response( + &mut self, mut response: PrivilegedUsersResponse) + { + self.users.update_privileges(response); + } + fn handle_room_list_response(&mut self, response: RoomListResponse) { // Update the room map in memory. self.rooms.update(response); // Send the updated version to the controller. - let response = self.rooms.get_room_list_response(); - self.control_send(control::Response::RoomListResponse(response)); + let control_response = self.rooms.get_room_list_response(); + self.control_send( + control::Response::RoomListResponse(control_response)); } - fn handle_privileged_users_response( - &mut self, mut response: PrivilegedUsersResponse) - { - self.users.update_privileges(response); + fn handle_say_room_response(&mut self, response: SayRoomResponse) { + // TODO Save the message somewhere. + let control_response = control::SayRoomResponse { + room_name: response.room_name, + user_name: response.user_name, + message: response.message, + }; + self.control_send(control::Response::SayRoomResponse(control_response)); } fn handle_user_joined_room_response( diff --git a/src/control/request.rs b/src/control/request.rs index ab402ce..98232e6 100644 --- a/src/control/request.rs +++ b/src/control/request.rs @@ -15,4 +15,15 @@ pub enum Request { LoginStatusRequest, /// The controller wants to know the list of visible chat rooms. RoomListRequest, + /// The controller wants to send a message to a chat room. + SayRoomRequest(SayRoomRequest), +} + +/// This structure contains the chat room message request from the controller. +#[derive(Debug, RustcDecodable, RustcEncodable)] +pub struct SayRoomRequest { + /// The name of the chat room in which to say the message. + pub room_name: String, + /// The message to be said. + pub message: String, } diff --git a/src/control/response.rs b/src/control/response.rs index 0c571f1..b1222a1 100644 --- a/src/control/response.rs +++ b/src/control/response.rs @@ -6,6 +6,7 @@ use room; pub enum Response { LoginStatusResponse(LoginStatusResponse), RoomListResponse(RoomListResponse), + SayRoomResponse(SayRoomResponse), } /// This enumeration is the list of possible login states, and the associated @@ -43,3 +44,15 @@ pub struct RoomListResponse { /// The list of (room name, room data) pairs. pub rooms: Vec<(String, room::Room)>, } + +/// This structure contains a message said in a chat room the user is a member +/// of. +#[derive(Debug, RustcDecodable, RustcEncodable)] +pub struct SayRoomResponse { + /// The name of the room in which the message was said. + pub room_name: String, + /// The name of the user who said the message. + pub user_name: String, + /// The message itself. + pub message: String, +}