Browse Source

Initial support of controller JoinRoomRequest.

wip
Titouan Rigoudy 9 years ago
parent
commit
d2194a7675
5 changed files with 67 additions and 1 deletions
  1. +9
    -0
      src/client.rs
  2. +1
    -0
      src/control/request.rs
  3. +1
    -0
      src/proto/server/constants.rs
  4. +20
    -0
      src/proto/server/request.rs
  5. +36
    -1
      src/proto/server/response.rs

+ 9
- 0
src/client.rs View File

@ -104,6 +104,9 @@ impl Client {
control::Request::RoomListRequest => control::Request::RoomListRequest =>
self.handle_room_list_request(), self.handle_room_list_request(),
control::Request::JoinRoomRequest(room_name) =>
self.handle_join_room_request(room_name),
/* /*
_ =>{ _ =>{
error!("Unhandled control request: {:?}", request); error!("Unhandled control request: {:?}", request);
@ -112,6 +115,12 @@ impl Client {
} }
} }
fn handle_join_room_request(&mut self, room_name: String) {
let request = JoinRoomRequest { room_name: room_name };
self.proto_tx.send(Request::ServerRequest(
ServerRequest::JoinRoomRequest(request)));
}
fn handle_login_status_request(&mut self) { fn handle_login_status_request(&mut self) {
let username = config::USERNAME.to_string(); let username = config::USERNAME.to_string();


+ 1
- 0
src/control/request.rs View File

@ -1,5 +1,6 @@
#[derive(Debug, RustcDecodable, RustcEncodable)] #[derive(Debug, RustcDecodable, RustcEncodable)]
pub enum Request { pub enum Request {
JoinRoomRequest(String),
LoginStatusRequest, LoginStatusRequest,
RoomListRequest, RoomListRequest,
} }

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

@ -1,6 +1,7 @@
pub const CODE_LOGIN: u32 = 1; pub const CODE_LOGIN: u32 = 1;
pub const CODE_SET_LISTEN_PORT: u32 = 2; 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_JOIN_ROOM: u32 = 14;
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;


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

@ -16,6 +16,7 @@ trait WriteToPacket {
#[derive(Debug)] #[derive(Debug)]
pub enum ServerRequest { pub enum ServerRequest {
JoinRoomRequest(JoinRoomRequest),
LoginRequest(LoginRequest), LoginRequest(LoginRequest),
PeerAddressRequest(PeerAddressRequest), PeerAddressRequest(PeerAddressRequest),
RoomListRequest(RoomListRequest), RoomListRequest(RoomListRequest),
@ -25,6 +26,9 @@ 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::JoinRoomRequest(ref request) =>
(Packet::new(CODE_JOIN_ROOM), request),
ServerRequest::LoginRequest(ref request) => ServerRequest::LoginRequest(ref request) =>
(Packet::new(CODE_LOGIN), request), (Packet::new(CODE_LOGIN), request),
@ -48,6 +52,22 @@ fn md5_str(string: &str) -> String {
hasher.result_str() hasher.result_str()
} }
/*===========*
* JOIN ROOM *
*===========*/
#[derive(Debug)]
pub struct JoinRoomRequest {
pub room_name: String
}
impl WriteToPacket for JoinRoomRequest {
fn write_to_packet(&self, packet: &mut Packet) -> io::Result<()> {
try!(packet.write_str(&self.room_name));
Ok(())
}
}
/*=======* /*=======*
* LOGIN * * LOGIN *
*=======*/ *=======*/


+ 36
- 1
src/proto/server/response.rs View File

@ -10,8 +10,9 @@ use super::super::packet::Packet;
#[derive(Debug)] #[derive(Debug)]
pub enum ServerResponse { pub enum ServerResponse {
LoginResponse(LoginResponse),
ConnectToPeerResponse(ConnectToPeerResponse), ConnectToPeerResponse(ConnectToPeerResponse),
JoinRoomResponse(JoinRoomResponse),
LoginResponse(LoginResponse),
PeerAddressResponse(PeerAddressResponse), PeerAddressResponse(PeerAddressResponse),
PrivilegedUsersResponse(PrivilegedUsersResponse), PrivilegedUsersResponse(PrivilegedUsersResponse),
RoomListResponse(RoomListResponse), RoomListResponse(RoomListResponse),
@ -33,6 +34,11 @@ impl ServerResponse {
try!(ConnectToPeerResponse::from_packet(&mut packet)) try!(ConnectToPeerResponse::from_packet(&mut packet))
), ),
CODE_JOIN_ROOM =>
ServerResponse::JoinRoomResponse(
try!(JoinRoomResponse::from_packet(&mut packet))
),
CODE_LOGIN => CODE_LOGIN =>
ServerResponse::LoginResponse( ServerResponse::LoginResponse(
try!(LoginResponse::from_packet(&mut packet)) try!(LoginResponse::from_packet(&mut packet))
@ -115,6 +121,35 @@ impl ConnectToPeerResponse {
} }
} }
/*===========*
* JOIN ROOM *
*===========*/
#[derive(Debug)]
pub struct JoinRoomResponse {
room_name: String,
user_names: Vec<String>,
user_statuses: Vec<u32>,
}
impl JoinRoomResponse {
pub fn from_packet(packet: &mut Packet) -> io::Result<Self> {
let room_name = try!(packet.read_str());
let mut user_names = Vec::new();
try!(packet.read_array(&mut user_names, Packet::read_str));
let mut user_statuses = Vec::new();
try!(packet.read_array(&mut user_statuses, Packet::read_uint));
Ok(JoinRoomResponse {
room_name: room_name,
user_names: user_names,
user_statuses: user_statuses,
})
}
}
/*=======* /*=======*
* LOGIN * * LOGIN *
*=======*/ *=======*/


Loading…
Cancel
Save