Browse Source

Add RoomUserLeftResponse.

wip
Titouan Rigoudy 9 years ago
parent
commit
4efd653431
4 changed files with 65 additions and 2 deletions
  1. +22
    -2
      src/client.rs
  2. +1
    -0
      src/proto/server/constants.rs
  3. +27
    -0
      src/proto/server/response.rs
  4. +15
    -0
      src/room.rs

+ 22
- 2
src/client.rs View File

@ -182,7 +182,7 @@ impl Client {
); );
}, },
Err(err) => error!("RoomJoinRequest: {}", err)
Err(err) => error!("RoomLeaveRequest: {}", err)
} }
} }
@ -245,6 +245,9 @@ impl Client {
ServerResponse::RoomMessageResponse(response) => ServerResponse::RoomMessageResponse(response) =>
self.handle_room_message_response(response), self.handle_room_message_response(response),
ServerResponse::RoomUserLeftResponse(response) =>
self.handle_room_user_left_response(response),
ServerResponse::UserJoinedRoomResponse(response) => ServerResponse::UserJoinedRoomResponse(response) =>
self.handle_user_joined_room_response(response), self.handle_user_joined_room_response(response),
@ -360,6 +363,20 @@ impl Client {
control::Response::RoomMessageResponse(control_response)); control::Response::RoomMessageResponse(control_response));
} }
fn handle_room_user_left_response(
&mut self, response: RoomUserLeftResponse)
{
let result = self.rooms.remove_member(
&response.room_name, &response.user_name
);
match result {
Ok(()) => {
// TODO send control response
},
Err(err) => error!("RoomUserLeftResponse: {}", err)
}
}
fn handle_user_joined_room_response( fn handle_user_joined_room_response(
&mut self, response: UserJoinedRoomResponse) &mut self, response: UserJoinedRoomResponse)
{ {
@ -367,7 +384,10 @@ impl Client {
&response.room_name, response.user_name.clone() &response.room_name, response.user_name.clone()
); );
match result { match result {
Ok(()) => self.users.insert(response.user_name, response.user),
Ok(()) => {
self.users.insert(response.user_name, response.user);
// TODO send control response
},
Err(err) => error!("UserJoinedRoomResponse: {}", err) Err(err) => error!("UserJoinedRoomResponse: {}", err)
} }
} }


+ 1
- 0
src/proto/server/constants.rs View File

@ -6,6 +6,7 @@ pub const CODE_ROOM_MESSAGE: u32 = 13;
pub const CODE_ROOM_JOIN: u32 = 14; pub const CODE_ROOM_JOIN: u32 = 14;
pub const CODE_ROOM_LEAVE: u32 = 15; pub const CODE_ROOM_LEAVE: u32 = 15;
pub const CODE_USER_JOINED_ROOM: u32 = 16; pub const CODE_USER_JOINED_ROOM: u32 = 16;
pub const CODE_ROOM_USER_LEFT: u32 = 17;
pub const CODE_CONNECT_TO_PEER: u32 = 18; pub const CODE_CONNECT_TO_PEER: u32 = 18;
pub const CODE_ROOM_LIST: u32 = 64; pub const CODE_ROOM_LIST: u32 = 64;
pub const CODE_PRIVILEGED_USERS: u32 = 69; pub const CODE_PRIVILEGED_USERS: u32 = 69;


+ 27
- 0
src/proto/server/response.rs View File

@ -28,6 +28,7 @@ pub enum ServerResponse {
RoomLeaveResponse(RoomLeaveResponse), RoomLeaveResponse(RoomLeaveResponse),
RoomListResponse(RoomListResponse), RoomListResponse(RoomListResponse),
RoomMessageResponse(RoomMessageResponse), RoomMessageResponse(RoomMessageResponse),
RoomUserLeftResponse(RoomUserLeftResponse),
UserJoinedRoomResponse(UserJoinedRoomResponse), UserJoinedRoomResponse(UserJoinedRoomResponse),
UserStatusResponse(UserStatusResponse), UserStatusResponse(UserStatusResponse),
WishlistIntervalResponse(WishlistIntervalResponse), WishlistIntervalResponse(WishlistIntervalResponse),
@ -83,6 +84,11 @@ impl FromPacket for ServerResponse {
try!(RoomMessageResponse::from_packet(packet)) try!(RoomMessageResponse::from_packet(packet))
), ),
CODE_ROOM_USER_LEFT =>
ServerResponse::RoomUserLeftResponse(
try!(RoomUserLeftResponse::from_packet(packet))
),
CODE_USER_JOINED_ROOM => CODE_USER_JOINED_ROOM =>
ServerResponse::UserJoinedRoomResponse( ServerResponse::UserJoinedRoomResponse(
try!(UserJoinedRoomResponse::from_packet(packet)) try!(UserJoinedRoomResponse::from_packet(packet))
@ -551,6 +557,27 @@ impl FromPacket for UserJoinedRoomResponse {
} }
} }
/*================*
* ROOM USER LEFT *
*================*/
#[derive(Debug)]
pub struct RoomUserLeftResponse {
pub room_name: String,
pub user_name: String,
}
impl FromPacket for RoomUserLeftResponse {
fn from_packet(packet: &mut Packet) -> result::Result<Self> {
let room_name = try!(packet.read_str());
let user_name = try!(packet.read_str());
Ok(RoomUserLeftResponse {
room_name: room_name,
user_name: user_name,
})
}
}
/*=============* /*=============*
* USER STATUS * * USER STATUS *
*=============*/ *=============*/


+ 15
- 0
src/room.rs View File

@ -329,6 +329,7 @@ impl RoomMap {
} }
/// Inserts the given user in the given room's set of members. /// Inserts the given user in the given room's set of members.
/// Returns an error if the room is not found.
pub fn insert_member(&mut self, room_name: &str, user_name: String) pub fn insert_member(&mut self, room_name: &str, user_name: String)
-> Result<(), Error> -> Result<(), Error>
{ {
@ -340,5 +341,19 @@ impl RoomMap {
None => Err(Error::RoomNotFound(room_name.to_string())), None => Err(Error::RoomNotFound(room_name.to_string())),
} }
} }
/// Removes the given user from the given room's set of members.
/// Returns an error if the room is not found.
pub fn remove_member(&mut self, room_name: &str, user_name: &str)
-> Result<(), Error>
{
match self.map.get_mut(room_name) {
Some(room) => {
room.members.remove(user_name);
Ok(())
},
None => Err(Error::RoomNotFound(room_name.to_string()))
}
}
} }

Loading…
Cancel
Save