Browse Source

Do not glob import proto::server in client.

wip
Titouan Rigoudy 9 years ago
parent
commit
6949682662
2 changed files with 71 additions and 57 deletions
  1. +71
    -55
      src/client.rs
  2. +0
    -2
      src/proto/mod.rs

+ 71
- 55
src/client.rs View File

@ -4,14 +4,14 @@ use mio;
use config; use config;
use control; use control;
use proto::{Response, Request};
use proto::server::*;
use proto;
use proto::server;
use room; use room;
use user; use user;
#[derive(Debug)] #[derive(Debug)]
enum IncomingMessage { enum IncomingMessage {
ServerResponse(ServerResponse),
ServerResponse(server::ServerResponse),
ControlNotification(control::Notification), ControlNotification(control::Notification),
} }
@ -23,8 +23,8 @@ enum LoginStatus {
} }
pub struct Client { pub struct Client {
proto_tx: mio::Sender<Request>,
proto_rx: mpsc::Receiver<Response>,
proto_tx: mio::Sender<proto::Request>,
proto_rx: mpsc::Receiver<proto::Response>,
control_tx: Option<control::Sender>, control_tx: Option<control::Sender>,
control_rx: mpsc::Receiver<control::Notification>, control_rx: mpsc::Receiver<control::Notification>,
@ -40,8 +40,8 @@ impl Client {
/// through `proto_tx` and `proto_rx`, and with the controller agent /// through `proto_tx` and `proto_rx`, and with the controller agent
/// through `control_rx`. /// through `control_rx`.
pub fn new( pub fn new(
proto_tx: mio::Sender<Request>,
proto_rx: mpsc::Receiver<Response>,
proto_tx: mio::Sender<proto::Request>,
proto_rx: mpsc::Receiver<proto::Response>,
control_rx: mpsc::Receiver<control::Notification>) control_rx: mpsc::Receiver<control::Notification>)
-> Self -> Self
{ {
@ -62,13 +62,14 @@ impl Client {
/// Runs the client, potentially forever. /// Runs the client, potentially forever.
pub fn run(&mut self) { pub fn run(&mut self) {
info!("Logging in..."); info!("Logging in...");
let server_request = ServerRequest::LoginRequest(LoginRequest::new(
self.send_to_server(server::ServerRequest::LoginRequest(
server::LoginRequest::new(
config::USERNAME, config::USERNAME,
config::PASSWORD, config::PASSWORD,
config::VER_MAJOR, config::VER_MAJOR,
config::VER_MINOR, config::VER_MINOR,
).unwrap());
self.send_to_server(server_request);
).unwrap()
));
loop { loop {
match self.recv() { match self.recv() {
@ -89,7 +90,7 @@ impl Client {
select! { select! {
result = proto_rx.recv() => result = proto_rx.recv() =>
match result.unwrap() { match result.unwrap() {
Response::ServerResponse(server_response) =>
proto::Response::ServerResponse(server_response) =>
IncomingMessage::ServerResponse(server_response), IncomingMessage::ServerResponse(server_response),
}, },
@ -99,8 +100,8 @@ impl Client {
} }
/// Send a request to the server. /// Send a request to the server.
fn send_to_server(&self, request: ServerRequest) {
self.proto_tx.send(Request::ServerRequest(request)).unwrap();
fn send_to_server(&self, request: server::ServerRequest) {
self.proto_tx.send(proto::Request::ServerRequest(request)).unwrap();
} }
/// Send a response to the controller client. /// Send a response to the controller client.
@ -205,11 +206,11 @@ impl Client {
match self.rooms.start_joining(&room_name) { match self.rooms.start_joining(&room_name) {
Ok(()) => { Ok(()) => {
info!("Requesting to join room {:?}", room_name); info!("Requesting to join room {:?}", room_name);
self.send_to_server(
ServerRequest::RoomJoinRequest(RoomJoinRequest {
self.send_to_server(server::ServerRequest::RoomJoinRequest(
server::RoomJoinRequest {
room_name: room_name room_name: room_name
})
);
}
));
}, },
Err(err) => error!("RoomLeaveRequest: {}", err) Err(err) => error!("RoomLeaveRequest: {}", err)
@ -220,11 +221,11 @@ impl Client {
match self.rooms.start_leaving(&room_name) { match self.rooms.start_leaving(&room_name) {
Ok(()) => { Ok(()) => {
info!("Requesting to leave room {:?}", room_name); info!("Requesting to leave room {:?}", room_name);
self.send_to_server(
ServerRequest::RoomLeaveRequest(RoomLeaveRequest {
self.send_to_server(server::ServerRequest::RoomLeaveRequest(
server::RoomLeaveRequest {
room_name: room_name room_name: room_name
})
);
}
));
}, },
Err(err) => error!("RoomLeaveRequest: {}", err) Err(err) => error!("RoomLeaveRequest: {}", err)
@ -233,20 +234,22 @@ impl Client {
fn handle_room_list_request(&mut self) { fn handle_room_list_request(&mut self) {
// First send the controller client what we have in memory. // First send the controller client what we have in memory.
let response = control::RoomListResponse {
rooms: self.rooms.get_room_list(),
};
self.send_to_controller(control::Response::RoomListResponse(response));
let rooms = self.rooms.get_room_list();
self.send_to_controller(control::Response::RoomListResponse(
control::RoomListResponse {
rooms: rooms
}
));
// Then ask the server for an updated version, which will be forwarded // Then ask the server for an updated version, which will be forwarded
// to the controller client once received. // to the controller client once received.
self.send_to_server(ServerRequest::RoomListRequest);
self.send_to_server(server::ServerRequest::RoomListRequest);
} }
fn handle_room_message_request( fn handle_room_message_request(
&mut self, request: control::RoomMessageRequest) &mut self, request: control::RoomMessageRequest)
{ {
self.send_to_server(ServerRequest::RoomMessageRequest(
RoomMessageRequest {
self.send_to_server(server::ServerRequest::RoomMessageRequest(
server::RoomMessageRequest {
room_name: request.room_name, room_name: request.room_name,
message: request.message, message: request.message,
} }
@ -257,52 +260,52 @@ impl Client {
* SERVER RESPONSE HANDLING * * SERVER RESPONSE HANDLING *
*==========================*/ *==========================*/
fn handle_server_response(&mut self, response: ServerResponse) {
fn handle_server_response(&mut self, response: server::ServerResponse) {
match response { match response {
ServerResponse::LoginResponse(response) =>
server::ServerResponse::LoginResponse(response) =>
self.handle_login_response(response), self.handle_login_response(response),
ServerResponse::PrivilegedUsersResponse(response) =>
server::ServerResponse::PrivilegedUsersResponse(response) =>
self.handle_privileged_users_response(response), self.handle_privileged_users_response(response),
ServerResponse::RoomJoinResponse(response) =>
server::ServerResponse::RoomJoinResponse(response) =>
self.handle_room_join_response(response), self.handle_room_join_response(response),
ServerResponse::RoomLeaveResponse(response) =>
server::ServerResponse::RoomLeaveResponse(response) =>
self.handle_room_leave_response(response), self.handle_room_leave_response(response),
ServerResponse::RoomListResponse(response) =>
server::ServerResponse::RoomListResponse(response) =>
self.handle_room_list_response(response), self.handle_room_list_response(response),
ServerResponse::RoomMessageResponse(response) =>
server::ServerResponse::RoomMessageResponse(response) =>
self.handle_room_message_response(response), self.handle_room_message_response(response),
ServerResponse::RoomTickersResponse(response) =>
server::ServerResponse::RoomTickersResponse(response) =>
self.handle_room_tickers_response(response), self.handle_room_tickers_response(response),
ServerResponse::RoomUserJoinedResponse(response) =>
server::ServerResponse::RoomUserJoinedResponse(response) =>
self.handle_room_user_joined_response(response), self.handle_room_user_joined_response(response),
ServerResponse::RoomUserLeftResponse(response) =>
server::ServerResponse::RoomUserLeftResponse(response) =>
self.handle_room_user_left_response(response), self.handle_room_user_left_response(response),
ServerResponse::UserInfoResponse(response) =>
server::ServerResponse::UserInfoResponse(response) =>
self.handle_user_info_response(response), self.handle_user_info_response(response),
ServerResponse::UserStatusResponse(response) =>
server::ServerResponse::UserStatusResponse(response) =>
self.handle_user_status_response(response), self.handle_user_status_response(response),
ServerResponse::UnknownResponse(code) =>
server::ServerResponse::UnknownResponse(code) =>
warn!("Unknown response: code {}", code), warn!("Unknown response: code {}", code),
response => warn!("Unhandled response: {:?}", response), response => warn!("Unhandled response: {:?}", response),
} }
} }
fn handle_login_response(&mut self, login: LoginResponse) {
fn handle_login_response(&mut self, login: server::LoginResponse) {
if let LoginStatus::Pending = self.login_status { if let LoginStatus::Pending = self.login_status {
match login { match login {
LoginResponse::LoginOk{ motd, ip, password_md5_opt } => {
server::LoginResponse::LoginOk{ motd, ip, password_md5_opt } => {
info!("Login successful!"); info!("Login successful!");
info!("MOTD: \"{}\"", motd); info!("MOTD: \"{}\"", motd);
info!("External IP address: {}", ip); info!("External IP address: {}", ip);
@ -320,7 +323,7 @@ impl Client {
self.login_status = LoginStatus::Success(motd); self.login_status = LoginStatus::Success(motd);
}, },
LoginResponse::LoginFail{ reason } => {
server::LoginResponse::LoginFail{ reason } => {
error!("Login failed: \"{}\"", reason); error!("Login failed: \"{}\"", reason);
self.login_status = LoginStatus::Failure(reason); self.login_status = LoginStatus::Failure(reason);
} }
@ -332,12 +335,14 @@ impl Client {
} }
fn handle_privileged_users_response( fn handle_privileged_users_response(
&mut self, response: PrivilegedUsersResponse)
&mut self, response: server::PrivilegedUsersResponse)
{ {
self.users.set_all_privileged(response.users); self.users.set_all_privileged(response.users);
} }
fn handle_room_join_response(&mut self, mut response: RoomJoinResponse) {
fn handle_room_join_response(
&mut self, mut response: server::RoomJoinResponse)
{
// Join the room and store the received information. // Join the room and store the received information.
let result = self.rooms.join( let result = self.rooms.join(
&response.room_name, response.owner, response.operators, &response.room_name, response.owner, response.operators,
@ -361,7 +366,9 @@ impl Client {
)); ));
} }
fn handle_room_leave_response(&mut self, response: RoomLeaveResponse) {
fn handle_room_leave_response(
&mut self, response: server::RoomLeaveResponse)
{
if let Err(err) = self.rooms.leave(&response.room_name) { if let Err(err) = self.rooms.leave(&response.room_name) {
error!("RoomLeaveResponse: {}", err); error!("RoomLeaveResponse: {}", err);
} }
@ -371,18 +378,22 @@ impl Client {
)); ));
} }
fn handle_room_list_response(&mut self, response: RoomListResponse) {
fn handle_room_list_response(&mut self, response: server::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);
// Send the updated version to the controller. // Send the updated version to the controller.
let rooms = self.rooms.get_room_list();
self.send_to_controller(control::Response::RoomListResponse( self.send_to_controller(control::Response::RoomListResponse(
control::RoomListResponse { control::RoomListResponse {
rooms: self.rooms.get_room_list()
rooms: rooms
} }
)); ));
} }
fn handle_room_message_response(&mut self, response: RoomMessageResponse) {
fn handle_room_message_response(
&mut self, response: server::RoomMessageResponse)
{
let result = self.rooms.add_message(&response.room_name, room::Message { let result = self.rooms.add_message(&response.room_name, room::Message {
user_name: response.user_name.clone(), user_name: response.user_name.clone(),
message: response.message.clone(), message: response.message.clone(),
@ -401,7 +412,9 @@ impl Client {
)); ));
} }
fn handle_room_tickers_response(&mut self, response: RoomTickersResponse) {
fn handle_room_tickers_response(
&mut self, response: server::RoomTickersResponse)
{
let result = self.rooms.set_tickers( let result = self.rooms.set_tickers(
&response.room_name, response.tickers &response.room_name, response.tickers
); );
@ -411,7 +424,7 @@ impl Client {
} }
fn handle_room_user_joined_response( fn handle_room_user_joined_response(
&mut self, response: RoomUserJoinedResponse)
&mut self, response: server::RoomUserJoinedResponse)
{ {
let result = self.rooms.insert_member( let result = self.rooms.insert_member(
&response.room_name, response.user_name.clone() &response.room_name, response.user_name.clone()
@ -429,7 +442,7 @@ impl Client {
} }
fn handle_room_user_left_response( fn handle_room_user_left_response(
&mut self, response: RoomUserLeftResponse)
&mut self, response: server::RoomUserLeftResponse)
{ {
let result = self.rooms.remove_member( let result = self.rooms.remove_member(
&response.room_name, &response.user_name &response.room_name, &response.user_name
@ -446,7 +459,8 @@ impl Client {
)); ));
} }
fn handle_user_info_response(&mut self, response: UserInfoResponse) {
fn handle_user_info_response(&mut self, response: server::UserInfoResponse)
{
let c_response = match self.users.get_mut_strict(&response.user_name) { let c_response = match self.users.get_mut_strict(&response.user_name) {
Ok(user) => { Ok(user) => {
user.average_speed = response.average_speed; user.average_speed = response.average_speed;
@ -468,7 +482,9 @@ impl Client {
); );
} }
fn handle_user_status_response(&mut self, response: UserStatusResponse) {
fn handle_user_status_response(
&mut self, response: server::UserStatusResponse)
{
let result = self.users.set_status( let result = self.users.set_status(
&response.user_name, response.status &response.user_name, response.status
); );


+ 0
- 2
src/proto/mod.rs View File

@ -5,9 +5,7 @@ pub mod server;
mod stream; mod stream;
pub use self::handler::*; pub use self::handler::*;
pub use self::packet::*; pub use self::packet::*;
pub use self::stream::*; pub use self::stream::*;
pub enum Request { pub enum Request {


Loading…
Cancel
Save