Browse Source

Add RoomLeaveResponse/Request, unhandled as yet.

wip
Titouan Rigoudy 9 years ago
parent
commit
65c437a022
5 changed files with 99 additions and 47 deletions
  1. +1
    -0
      TODO.md
  2. +28
    -21
      src/client.rs
  3. +1
    -0
      src/proto/server/constants.rs
  4. +40
    -20
      src/proto/server/request.rs
  5. +29
    -6
      src/proto/server/response.rs

+ 1
- 0
TODO.md View File

@ -1,5 +1,6 @@
Things to do: Things to do:
------------- -------------
- Handle RoomLeaveRequest/Response.
- Print out surplus bytes in hex to make analyzing them easier - Print out surplus bytes in hex to make analyzing them easier
- Handle client connections - Handle client connections

+ 28
- 21
src/client.rs View File

@ -126,12 +126,12 @@ impl Client {
self.controller_connected = false; self.controller_connected = false;
}, },
control::Request::RoomJoinRequest(room_name) =>
self.handle_room_join_request(room_name),
control::Request::LoginStatusRequest => control::Request::LoginStatusRequest =>
self.handle_login_status_request(), self.handle_login_status_request(),
control::Request::RoomJoinRequest(room_name) =>
self.handle_room_join_request(room_name),
control::Request::RoomListRequest => control::Request::RoomListRequest =>
self.handle_room_list_request(), self.handle_room_list_request(),
@ -242,6 +242,9 @@ impl Client {
ServerResponse::RoomJoinResponse(response) => ServerResponse::RoomJoinResponse(response) =>
self.handle_room_join_response(response), self.handle_room_join_response(response),
ServerResponse::RoomLeaveResponse(response) =>
self.handle_room_leave_response(response),
ServerResponse::RoomListResponse(response) => ServerResponse::RoomListResponse(response) =>
self.handle_room_list_response(response), self.handle_room_list_response(response),
@ -258,24 +261,6 @@ impl Client {
} }
} }
fn handle_room_join_response(&mut self, mut response: RoomJoinResponse) {
// Join the room and store the received information.
self.rooms.join(
&response.room_name, response.owner, response.operators,
&response.users);
// Then update the user structs based on the info we just got.
for (name, user) in response.users.drain(..) {
self.users.insert(name, user);
}
let control_response = control::RoomJoinResponse {
room_name: response.room_name
};
self.control_send(control::Response::RoomJoinResponse(
control_response));
}
fn handle_login_response(&mut self, login: LoginResponse) { fn handle_login_response(&mut self, login: LoginResponse) {
if let LoginStatus::Pending = self.login_status { if let LoginStatus::Pending = self.login_status {
match login { match login {
@ -314,6 +299,28 @@ impl Client {
self.users.set_all_privileged(response.users); self.users.set_all_privileged(response.users);
} }
fn handle_room_join_response(&mut self, mut response: RoomJoinResponse) {
// Join the room and store the received information.
self.rooms.join(
&response.room_name, response.owner, response.operators,
&response.users);
// Then update the user structs based on the info we just got.
for (name, user) in response.users.drain(..) {
self.users.insert(name, user);
}
let control_response = control::RoomJoinResponse {
room_name: response.room_name
};
self.control_send(control::Response::RoomJoinResponse(
control_response));
}
fn handle_room_leave_response(&mut self, response: RoomLeaveResponse) {
// TODO handle it.
}
fn handle_room_list_response(&mut self, response: RoomListResponse) { fn handle_room_list_response(&mut self, response: RoomListResponse) {
// Update the room map in memory. // Update the room map in memory.
self.rooms.set_room_list(response); self.rooms.set_room_list(response);


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

@ -3,6 +3,7 @@ pub const CODE_SET_LISTEN_PORT: u32 = 2;
pub const CODE_PEER_ADDRESS: u32 = 3; pub const CODE_PEER_ADDRESS: u32 = 3;
pub const CODE_ROOM_MESSAGE: u32 = 13; 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_USER_JOINED_ROOM: u32 = 16; pub const CODE_USER_JOINED_ROOM: u32 = 16;
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;


+ 40
- 20
src/proto/server/request.rs View File

@ -16,9 +16,10 @@ trait WriteToPacket {
#[derive(Debug)] #[derive(Debug)]
pub enum ServerRequest { pub enum ServerRequest {
RoomJoinRequest(RoomJoinRequest),
LoginRequest(LoginRequest), LoginRequest(LoginRequest),
PeerAddressRequest(PeerAddressRequest), PeerAddressRequest(PeerAddressRequest),
RoomJoinRequest(RoomJoinRequest),
RoomLeaveRequest(RoomLeaveRequest),
RoomListRequest, RoomListRequest,
RoomMessageRequest(RoomMessageRequest), RoomMessageRequest(RoomMessageRequest),
SetListenPortRequest(SetListenPortRequest), SetListenPortRequest(SetListenPortRequest),
@ -27,15 +28,18 @@ pub enum ServerRequest {
impl ServerRequest { impl ServerRequest {
pub fn to_packet(&self) -> io::Result<Packet> { pub fn to_packet(&self) -> io::Result<Packet> {
let (mut packet, request): (Packet, &WriteToPacket) = match *self { let (mut packet, request): (Packet, &WriteToPacket) = match *self {
ServerRequest::RoomJoinRequest(ref request) =>
(Packet::new(CODE_ROOM_JOIN), request),
ServerRequest::LoginRequest(ref request) => ServerRequest::LoginRequest(ref request) =>
(Packet::new(CODE_LOGIN), request), (Packet::new(CODE_LOGIN), request),
ServerRequest::PeerAddressRequest(ref request) => ServerRequest::PeerAddressRequest(ref request) =>
(Packet::new(CODE_PEER_ADDRESS), request), (Packet::new(CODE_PEER_ADDRESS), request),
ServerRequest::RoomJoinRequest(ref request) =>
(Packet::new(CODE_ROOM_JOIN), request),
ServerRequest::RoomLeaveRequest(ref request) =>
(Packet::new(CODE_ROOM_LEAVE), request),
ServerRequest::RoomListRequest => ServerRequest::RoomListRequest =>
return Ok(Packet::new(CODE_ROOM_LIST)), return Ok(Packet::new(CODE_ROOM_LIST)),
@ -56,22 +60,6 @@ fn md5_str(string: &str) -> String {
hasher.result_str() hasher.result_str()
} }
/*===========*
* JOIN ROOM *
*===========*/
#[derive(Debug)]
pub struct RoomJoinRequest {
pub room_name: String
}
impl WriteToPacket for RoomJoinRequest {
fn write_to_packet(&self, packet: &mut Packet) -> io::Result<()> {
try!(packet.write_str(&self.room_name));
Ok(())
}
}
/*=======* /*=======*
* LOGIN * * LOGIN *
*=======*/ *=======*/
@ -139,6 +127,38 @@ impl WriteToPacket for PeerAddressRequest {
} }
} }
/*===========*
* ROOM JOIN *
*===========*/
#[derive(Debug)]
pub struct RoomJoinRequest {
pub room_name: String
}
impl WriteToPacket for RoomJoinRequest {
fn write_to_packet(&self, packet: &mut Packet) -> io::Result<()> {
try!(packet.write_str(&self.room_name));
Ok(())
}
}
/*============*
* ROOM LEAVE *
*============*/
#[derive(Debug)]
pub struct RoomLeaveRequest {
pub room_name: String
}
impl WriteToPacket for RoomLeaveRequest {
fn write_to_packet(&self, packet: &mut Packet) -> io::Result<()> {
try!(packet.write_str(&self.room_name));
Ok(())
}
}
/*==============* /*==============*
* ROOM MESSAGE * * ROOM MESSAGE *
*==============*/ *==============*/


+ 29
- 6
src/proto/server/response.rs View File

@ -21,10 +21,11 @@ pub trait FromPacket: Sized {
#[derive(Debug)] #[derive(Debug)]
pub enum ServerResponse { pub enum ServerResponse {
ConnectToPeerResponse(ConnectToPeerResponse), ConnectToPeerResponse(ConnectToPeerResponse),
RoomJoinResponse(RoomJoinResponse),
LoginResponse(LoginResponse), LoginResponse(LoginResponse),
PeerAddressResponse(PeerAddressResponse), PeerAddressResponse(PeerAddressResponse),
PrivilegedUsersResponse(PrivilegedUsersResponse), PrivilegedUsersResponse(PrivilegedUsersResponse),
RoomJoinResponse(RoomJoinResponse),
RoomLeaveResponse(RoomLeaveResponse),
RoomListResponse(RoomListResponse), RoomListResponse(RoomListResponse),
RoomMessageResponse(RoomMessageResponse), RoomMessageResponse(RoomMessageResponse),
UserJoinedRoomResponse(UserJoinedRoomResponse), UserJoinedRoomResponse(UserJoinedRoomResponse),
@ -46,11 +47,6 @@ impl FromPacket for ServerResponse {
try!(ConnectToPeerResponse::from_packet(packet)) try!(ConnectToPeerResponse::from_packet(packet))
), ),
CODE_ROOM_JOIN =>
ServerResponse::RoomJoinResponse(
try!(RoomJoinResponse::from_packet(packet))
),
CODE_LOGIN => CODE_LOGIN =>
ServerResponse::LoginResponse( ServerResponse::LoginResponse(
try!(LoginResponse::from_packet(packet)) try!(LoginResponse::from_packet(packet))
@ -66,6 +62,16 @@ impl FromPacket for ServerResponse {
try!(PrivilegedUsersResponse::from_packet(packet)) try!(PrivilegedUsersResponse::from_packet(packet))
), ),
CODE_ROOM_JOIN =>
ServerResponse::RoomJoinResponse(
try!(RoomJoinResponse::from_packet(packet))
),
CODE_ROOM_LEAVE =>
ServerResponse::RoomLeaveResponse(
try!(RoomLeaveResponse::from_packet(packet))
),
CODE_ROOM_LIST => CODE_ROOM_LIST =>
ServerResponse::RoomListResponse( ServerResponse::RoomListResponse(
try!(RoomListResponse::from_packet(packet)) try!(RoomListResponse::from_packet(packet))
@ -375,6 +381,23 @@ impl RoomJoinResponse {
} }
} }
/*============*
* ROOM LEAVE *
*============*/
#[derive(Debug)]
pub struct RoomLeaveResponse {
pub room_name: String,
}
impl FromPacket for RoomLeaveResponse {
fn from_packet(packet: &mut Packet) -> result::Result<Self> {
Ok(RoomLeaveResponse {
room_name: try!(packet.read_str()),
})
}
}
/*===========* /*===========*
* ROOM LIST * * ROOM LIST *
*===========*/ *===========*/


Loading…
Cancel
Save