Browse Source

Rename JoinRoom to RoomJoin.

wip
Titouan Rigoudy 9 years ago
parent
commit
d45193cc78
7 changed files with 136 additions and 138 deletions
  1. +12
    -13
      src/client.rs
  2. +1
    -1
      src/control/request.rs
  3. +2
    -2
      src/control/response.rs
  4. +1
    -1
      src/proto/server/constants.rs
  5. +5
    -5
      src/proto/server/request.rs
  6. +115
    -115
      src/proto/server/response.rs
  7. +0
    -1
      src/room.rs

+ 12
- 13
src/client.rs View File

@ -1,4 +1,3 @@
use std::collections;
use std::sync::mpsc; use std::sync::mpsc;
use mio; use mio;
@ -127,8 +126,8 @@ impl Client {
self.controller_connected = false; self.controller_connected = false;
}, },
control::Request::JoinRoomRequest(room_name) =>
self.handle_join_room_request(room_name),
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(),
@ -147,7 +146,7 @@ impl Client {
} }
} }
fn handle_join_room_request(&mut self, room_name: String) {
fn handle_room_join_request(&mut self, room_name: String) {
// First check that we are not already a member. // First check that we are not already a member.
// Enclosed in a block otherwise the mutable borrow of self.rooms // Enclosed in a block otherwise the mutable borrow of self.rooms
// prevents from calling self.server_send. // prevents from calling self.server_send.
@ -181,7 +180,7 @@ impl Client {
} }
} }
} }
self.server_send(ServerRequest::JoinRoomRequest(JoinRoomRequest {
self.server_send(ServerRequest::RoomJoinRequest(RoomJoinRequest {
room_name: room_name room_name: room_name
})); }));
} }
@ -234,15 +233,15 @@ impl Client {
fn handle_server_response(&mut self, response: ServerResponse) { fn handle_server_response(&mut self, response: ServerResponse) {
match response { match response {
ServerResponse::JoinRoomResponse(response) =>
self.handle_join_room_response(response),
ServerResponse::LoginResponse(response) => ServerResponse::LoginResponse(response) =>
self.handle_login_response(response), self.handle_login_response(response),
ServerResponse::PrivilegedUsersResponse(response) => ServerResponse::PrivilegedUsersResponse(response) =>
self.handle_privileged_users_response(response), self.handle_privileged_users_response(response),
ServerResponse::RoomJoinResponse(response) =>
self.handle_room_join_response(response),
ServerResponse::RoomListResponse(response) => ServerResponse::RoomListResponse(response) =>
self.handle_room_list_response(response), self.handle_room_list_response(response),
@ -259,7 +258,7 @@ impl Client {
} }
} }
fn handle_join_room_response(&mut self, mut response: JoinRoomResponse) {
fn handle_room_join_response(&mut self, mut response: RoomJoinResponse) {
// Join the room and store the received information. // Join the room and store the received information.
self.rooms.join( self.rooms.join(
&response.room_name, response.owner, response.operators, &response.room_name, response.owner, response.operators,
@ -270,10 +269,10 @@ impl Client {
self.users.insert(name, user); self.users.insert(name, user);
} }
let control_response = control::JoinRoomResponse {
let control_response = control::RoomJoinResponse {
room_name: response.room_name room_name: response.room_name
}; };
self.control_send(control::Response::JoinRoomResponse(
self.control_send(control::Response::RoomJoinResponse(
control_response)); control_response));
} }
@ -310,7 +309,7 @@ impl Client {
} }
fn handle_privileged_users_response( fn handle_privileged_users_response(
&mut self, mut response: PrivilegedUsersResponse)
&mut self, response: PrivilegedUsersResponse)
{ {
self.users.update_privileges(response); self.users.update_privileges(response);
} }
@ -342,7 +341,7 @@ impl Client {
} }
fn handle_user_joined_room_response( fn handle_user_joined_room_response(
&mut self, mut response: UserJoinedRoomResponse)
&mut self, response: UserJoinedRoomResponse)
{ {
if let Some(room) = self.rooms.get_mut(&response.room_name) { if let Some(room) = self.rooms.get_mut(&response.room_name) {
room.members.insert(response.user_name.clone()); room.members.insert(response.user_name.clone());


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

@ -10,7 +10,7 @@ pub enum Request {
/// sent. /// sent.
DisconnectNotification, DisconnectNotification,
/// The controller wants to join a room. Contains the room name. /// The controller wants to join a room. Contains the room name.
JoinRoomRequest(String),
RoomJoinRequest(String),
/// The controller wants to know what the login status is. /// The controller wants to know what the login status is.
LoginStatusRequest, LoginStatusRequest,
/// The controller wants to know the list of visible chat rooms. /// The controller wants to know the list of visible chat rooms.


+ 2
- 2
src/control/response.rs View File

@ -4,14 +4,14 @@ use room;
/// to the controller. /// to the controller.
#[derive(Debug, RustcDecodable, RustcEncodable)] #[derive(Debug, RustcDecodable, RustcEncodable)]
pub enum Response { pub enum Response {
JoinRoomResponse(JoinRoomResponse),
RoomJoinResponse(RoomJoinResponse),
LoginStatusResponse(LoginStatusResponse), LoginStatusResponse(LoginStatusResponse),
RoomListResponse(RoomListResponse), RoomListResponse(RoomListResponse),
RoomMessageResponse(RoomMessageResponse), RoomMessageResponse(RoomMessageResponse),
} }
#[derive(Debug, RustcEncodable, RustcDecodable)] #[derive(Debug, RustcEncodable, RustcDecodable)]
pub struct JoinRoomResponse {
pub struct RoomJoinResponse {
pub room_name: String, pub room_name: String,
} }


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

@ -2,7 +2,7 @@ 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_ROOM_MESSAGE: u32 = 13; pub const CODE_ROOM_MESSAGE: u32 = 13;
pub const CODE_JOIN_ROOM: u32 = 14;
pub const CODE_ROOM_JOIN: u32 = 14;
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;


+ 5
- 5
src/proto/server/request.rs View File

@ -16,7 +16,7 @@ trait WriteToPacket {
#[derive(Debug)] #[derive(Debug)]
pub enum ServerRequest { pub enum ServerRequest {
JoinRoomRequest(JoinRoomRequest),
RoomJoinRequest(RoomJoinRequest),
LoginRequest(LoginRequest), LoginRequest(LoginRequest),
PeerAddressRequest(PeerAddressRequest), PeerAddressRequest(PeerAddressRequest),
RoomListRequest, RoomListRequest,
@ -27,8 +27,8 @@ 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::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),
@ -61,11 +61,11 @@ fn md5_str(string: &str) -> String {
*===========*/ *===========*/
#[derive(Debug)] #[derive(Debug)]
pub struct JoinRoomRequest {
pub struct RoomJoinRequest {
pub room_name: String pub room_name: String
} }
impl WriteToPacket for JoinRoomRequest {
impl WriteToPacket for RoomJoinRequest {
fn write_to_packet(&self, packet: &mut Packet) -> io::Result<()> { fn write_to_packet(&self, packet: &mut Packet) -> io::Result<()> {
try!(packet.write_str(&self.room_name)); try!(packet.write_str(&self.room_name));
Ok(()) Ok(())


+ 115
- 115
src/proto/server/response.rs View File

@ -21,7 +21,7 @@ pub trait FromPacket: Sized {
#[derive(Debug)] #[derive(Debug)]
pub enum ServerResponse { pub enum ServerResponse {
ConnectToPeerResponse(ConnectToPeerResponse), ConnectToPeerResponse(ConnectToPeerResponse),
JoinRoomResponse(JoinRoomResponse),
RoomJoinResponse(RoomJoinResponse),
LoginResponse(LoginResponse), LoginResponse(LoginResponse),
PeerAddressResponse(PeerAddressResponse), PeerAddressResponse(PeerAddressResponse),
PrivilegedUsersResponse(PrivilegedUsersResponse), PrivilegedUsersResponse(PrivilegedUsersResponse),
@ -46,9 +46,9 @@ impl FromPacket for ServerResponse {
try!(ConnectToPeerResponse::from_packet(packet)) try!(ConnectToPeerResponse::from_packet(packet))
), ),
CODE_JOIN_ROOM =>
ServerResponse::JoinRoomResponse(
try!(JoinRoomResponse::from_packet(packet))
CODE_ROOM_JOIN =>
ServerResponse::RoomJoinResponse(
try!(RoomJoinResponse::from_packet(packet))
), ),
CODE_LOGIN => CODE_LOGIN =>
@ -143,117 +143,6 @@ impl FromPacket for ConnectToPeerResponse {
} }
} }
/*===========*
* JOIN ROOM *
*===========*/
#[derive(Debug)]
pub struct JoinRoomResponse {
pub room_name: String,
pub users: Vec<(String, user::User)>,
pub owner: Option<String>,
pub operators: Vec<String>,
}
impl FromPacket for JoinRoomResponse {
fn from_packet(packet: &mut Packet) -> result::Result<Self> {
let mut response = JoinRoomResponse {
room_name: try!(packet.read_str()),
users: Vec::new(),
owner: None,
operators: Vec::new(),
};
let result: result::Result<usize> =
packet.read_array(&mut response.users, |packet| {
let name = try!(packet.read_str());
let user = user::User {
status: user::Status::Offline,
average_speed: 0,
num_downloads: 0,
unknown: 0,
num_files: 0,
num_folders: 0,
num_free_slots: 0,
country: String::new(),
};
Ok((name, user))
});
try!(result);
try!(response.read_user_infos(packet));
if packet.bytes_remaining() > 0 {
response.owner = Some(try!(packet.read_str()));
try!(packet.read_array(&mut response.operators, Packet::read_str));
}
Ok(response)
}
}
impl JoinRoomResponse {
fn read_user_infos(&mut self, packet: &mut Packet)
-> result::Result<()>
{
let num_statuses_res: result::Result<usize> =
packet.read_array_with(|packet, i| {
if let Some(&mut (_, ref mut user)) = self.users.get_mut(i) {
let status_u32 = try!(packet.read_uint());
user.status = try!(user::Status::from_u32(status_u32));
}
Ok(())
});
let num_statuses = try!(num_statuses_res);
let num_infos_res: result::Result<usize> =
packet.read_array_with(|packet, i| {
if let Some(&mut (_, ref mut user)) = self.users.get_mut(i) {
user.average_speed = try!(packet.read_uint()) as usize;
user.num_downloads = try!(packet.read_uint()) as usize;
user.unknown = try!(packet.read_uint()) as usize;
user.num_files = try!(packet.read_uint()) as usize;
user.num_folders = try!(packet.read_uint()) as usize;
}
Ok(())
});
let num_infos = try!(num_infos_res);
let num_free_slots_res: result::Result<usize> =
packet.read_array_with(|packet, i| {
if let Some(&mut (_, ref mut user)) = self.users.get_mut(i) {
user.num_free_slots = try!(packet.read_uint()) as usize;
}
Ok(())
});
let num_free_slots = try!(num_free_slots_res);
let num_countries_res: result::Result<usize> =
packet.read_array_with(|packet, i| {
if let Some(&mut (_, ref mut user)) = self.users.get_mut(i) {
user.country = try!(packet.read_str());
}
Ok(())
});
let num_countries = try!(num_countries_res);
let num_users = self.users.len();
if num_users != num_statuses ||
num_users != num_infos ||
num_users != num_free_slots ||
num_users != num_countries
{
warn!(
"JoinRoomResponse: mismatched vector sizes {}, {}, {}, {}, {}",
num_users, num_statuses, num_infos, num_free_slots,
num_countries
);
}
Ok(())
}
}
/*=======* /*=======*
* LOGIN * * LOGIN *
*=======*/ *=======*/
@ -375,6 +264,117 @@ impl FromPacket for PrivilegedUsersResponse {
} }
} }
/*===========*
* ROOM JOIN *
*===========*/
#[derive(Debug)]
pub struct RoomJoinResponse {
pub room_name: String,
pub users: Vec<(String, user::User)>,
pub owner: Option<String>,
pub operators: Vec<String>,
}
impl FromPacket for RoomJoinResponse {
fn from_packet(packet: &mut Packet) -> result::Result<Self> {
let mut response = RoomJoinResponse {
room_name: try!(packet.read_str()),
users: Vec::new(),
owner: None,
operators: Vec::new(),
};
let result: result::Result<usize> =
packet.read_array(&mut response.users, |packet| {
let name = try!(packet.read_str());
let user = user::User {
status: user::Status::Offline,
average_speed: 0,
num_downloads: 0,
unknown: 0,
num_files: 0,
num_folders: 0,
num_free_slots: 0,
country: String::new(),
};
Ok((name, user))
});
try!(result);
try!(response.read_user_infos(packet));
if packet.bytes_remaining() > 0 {
response.owner = Some(try!(packet.read_str()));
try!(packet.read_array(&mut response.operators, Packet::read_str));
}
Ok(response)
}
}
impl RoomJoinResponse {
fn read_user_infos(&mut self, packet: &mut Packet)
-> result::Result<()>
{
let num_statuses_res: result::Result<usize> =
packet.read_array_with(|packet, i| {
if let Some(&mut (_, ref mut user)) = self.users.get_mut(i) {
let status_u32 = try!(packet.read_uint());
user.status = try!(user::Status::from_u32(status_u32));
}
Ok(())
});
let num_statuses = try!(num_statuses_res);
let num_infos_res: result::Result<usize> =
packet.read_array_with(|packet, i| {
if let Some(&mut (_, ref mut user)) = self.users.get_mut(i) {
user.average_speed = try!(packet.read_uint()) as usize;
user.num_downloads = try!(packet.read_uint()) as usize;
user.unknown = try!(packet.read_uint()) as usize;
user.num_files = try!(packet.read_uint()) as usize;
user.num_folders = try!(packet.read_uint()) as usize;
}
Ok(())
});
let num_infos = try!(num_infos_res);
let num_free_slots_res: result::Result<usize> =
packet.read_array_with(|packet, i| {
if let Some(&mut (_, ref mut user)) = self.users.get_mut(i) {
user.num_free_slots = try!(packet.read_uint()) as usize;
}
Ok(())
});
let num_free_slots = try!(num_free_slots_res);
let num_countries_res: result::Result<usize> =
packet.read_array_with(|packet, i| {
if let Some(&mut (_, ref mut user)) = self.users.get_mut(i) {
user.country = try!(packet.read_str());
}
Ok(())
});
let num_countries = try!(num_countries_res);
let num_users = self.users.len();
if num_users != num_statuses ||
num_users != num_infos ||
num_users != num_free_slots ||
num_users != num_countries
{
warn!(
"RoomJoinResponse: mismatched vector sizes {}, {}, {}, {}, {}",
num_users, num_statuses, num_infos, num_free_slots,
num_countries
);
}
Ok(())
}
}
/*===========* /*===========*
* ROOM LIST * * ROOM LIST *
*===========*/ *===========*/


+ 0
- 1
src/room.rs View File

@ -1,7 +1,6 @@
use std::collections; use std::collections;
use std::mem; use std::mem;
use control;
use proto::server; use proto::server;
use user; use user;


Loading…
Cancel
Save