diff --git a/Cargo.lock b/Cargo.lock index 0506758..d9ebe15 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1100,6 +1100,26 @@ dependencies = [ [[package]] name = "solstice-client" version = "0.1.0" +dependencies = [ + "crossbeam-channel", + "env_logger", + "log 0.4.8", + "mio 0.6.22", + "parking_lot 0.8.0", + "rustc-serialize", + "slab 0.2.0", + "solstice-proto", + "threadpool", + "tokio 1.0.1", + "tokio-codec", + "tokio-core", + "tokio-io", + "ws", +] + +[[package]] +name = "solstice-proto" +version = "0.1.0" dependencies = [ "async-stream", "byteorder 0.5.3", @@ -1116,12 +1136,10 @@ dependencies = [ "rustc-serialize", "slab 0.2.0", "thiserror", - "threadpool", "tokio 1.0.1", "tokio-codec", "tokio-core", "tokio-io", - "ws", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 2596cea..9e53580 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,4 +2,5 @@ members = [ "client", + "proto", ] diff --git a/client/Cargo.toml b/client/Cargo.toml index 7279edf..a86c6ee 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -5,21 +5,14 @@ authors = ["letitz"] edition = "2018" [dependencies] -async-stream = "^0.3" -byteorder = "^0.5.1" -bytes = "^1.0" crossbeam-channel = "^0.3" -encoding = "^0.2" -encoding_rs = "^0.8" env_logger = "^0.8" -futures = "^0.3" log = "^0.4" mio = "^0.6" parking_lot = "^0.8" -rust-crypto = "^0.2.34" rustc-serialize = "^0.3.17" slab = "^0.2" -thiserror = "^1.0" +solstice-proto = { path = "../proto" } threadpool = "^1.0" tokio = { version = "1", features = ["full"] } tokio-core = "^0.1" diff --git a/client/src/client.rs b/client/src/client.rs index 212e3f2..2dc0b12 100644 --- a/client/src/client.rs +++ b/client/src/client.rs @@ -3,19 +3,19 @@ use std::net; use crossbeam_channel; use mio; use slab; +use solstice_proto; +use solstice_proto::config; +use solstice_proto::peer; +use solstice_proto::server; -use crate::config; use crate::control; use crate::login::LoginStatus; -use crate::proto; -use crate::proto::peer; -use crate::proto::server; use crate::room; use crate::user; #[derive(Debug)] enum IncomingMessage { - Proto(proto::Response), + Proto(solstice_proto::Response), #[allow(dead_code)] ControlNotification(control::Notification), @@ -49,8 +49,8 @@ struct Peer { pub struct Client { #[allow(deprecated)] - proto_tx: mio::deprecated::Sender, - proto_rx: crossbeam_channel::Receiver, + proto_tx: mio::deprecated::Sender, + proto_rx: crossbeam_channel::Receiver, control_tx: Option, @@ -71,8 +71,8 @@ impl Client { /// through `control_rx`. #[allow(deprecated)] pub fn new( - proto_tx: mio::deprecated::Sender, - proto_rx: crossbeam_channel::Receiver, + proto_tx: mio::deprecated::Sender, + proto_rx: crossbeam_channel::Receiver, control_rx: crossbeam_channel::Receiver, ) -> Self { Client { @@ -141,7 +141,7 @@ impl Client { #[allow(deprecated)] self .proto_tx - .send(proto::Request::ServerRequest(request)) + .send(solstice_proto::Request::ServerRequest(request)) .unwrap(); } @@ -150,7 +150,7 @@ impl Client { #[allow(deprecated)] self .proto_tx - .send(proto::Request::PeerMessage(peer_id, message)) + .send(solstice_proto::Request::PeerMessage(peer_id, message)) .unwrap(); } @@ -327,17 +327,17 @@ impl Client { * PROTO RESPONSE HANDLING * *=========================*/ - fn handle_proto_response(&mut self, response: proto::Response) { + fn handle_proto_response(&mut self, response: solstice_proto::Response) { match response { - proto::Response::ServerResponse(server_response) => { + solstice_proto::Response::ServerResponse(server_response) => { self.handle_server_response(server_response) } - proto::Response::PeerConnectionOpen(peer_id) => { + solstice_proto::Response::PeerConnectionOpen(peer_id) => { self.handle_peer_connection_open(peer_id) } - proto::Response::PeerConnectionClosed(peer_id) => { + solstice_proto::Response::PeerConnectionClosed(peer_id) => { self.handle_peer_connection_closed(peer_id) } @@ -383,7 +383,7 @@ impl Client { #[allow(deprecated)] self .proto_tx - .send(proto::Request::ServerRequest( + .send(solstice_proto::Request::ServerRequest( server::ConnectToPeerRequest { token: peer.token, user_name: peer.user_name.clone(), @@ -404,7 +404,7 @@ impl Client { #[allow(deprecated)] self .proto_tx - .send(proto::Request::ServerRequest( + .send(solstice_proto::Request::ServerRequest( server::CannotConnectRequest { token: peer.token, user_name: peer.user_name, @@ -568,7 +568,7 @@ impl Client { #[allow(deprecated)] self .proto_tx - .send(proto::Request::PeerConnect( + .send(solstice_proto::Request::PeerConnect( peer_id, response.ip, response.port, diff --git a/client/src/control/response.rs b/client/src/control/response.rs index 770ebec..3fabb9b 100644 --- a/client/src/control/response.rs +++ b/client/src/control/response.rs @@ -1,4 +1,4 @@ -use crate::proto::User; +use solstice_proto::User; use crate::room; /// This enumeration is the list of possible control responses from the client diff --git a/client/src/control/ws.rs b/client/src/control/ws.rs index 00881c6..2126448 100644 --- a/client/src/control/ws.rs +++ b/client/src/control/ws.rs @@ -4,8 +4,7 @@ use std::fmt; use crossbeam_channel; use rustc_serialize::json; use ws; - -use crate::config; +use solstice_proto::config; use super::request::*; use super::response::*; diff --git a/client/src/dispatcher.rs b/client/src/dispatcher.rs index ebae154..56d7952 100644 --- a/client/src/dispatcher.rs +++ b/client/src/dispatcher.rs @@ -6,7 +6,7 @@ use crate::context::Context; use crate::executor::Job; use crate::handlers::{LoginHandler, SetPrivilegedUsersHandler}; use crate::message_handler::MessageHandler; -use crate::proto::server::ServerResponse; +use solstice_proto::server::ServerResponse; /// The type of messages dispatched by a dispatcher. #[derive(Debug)] @@ -72,7 +72,7 @@ impl Dispatcher { #[cfg(test)] mod tests { - use crate::proto::server; + use solstice_proto::server; use super::*; diff --git a/client/src/executor.rs b/client/src/executor.rs index b45ca69..5cde206 100644 --- a/client/src/executor.rs +++ b/client/src/executor.rs @@ -61,7 +61,7 @@ impl Executor { mod tests { use std::sync::{Arc, Barrier}; - use crate::proto::{User, UserStatus}; + use solstice_proto::{User, UserStatus}; use super::{Context, Executor, Job}; diff --git a/client/src/handlers/login_handler.rs b/client/src/handlers/login_handler.rs index 848ba3a..4798114 100644 --- a/client/src/handlers/login_handler.rs +++ b/client/src/handlers/login_handler.rs @@ -3,7 +3,7 @@ use std::io; use crate::context::Context; use crate::login::LoginStatus; use crate::message_handler::MessageHandler; -use crate::proto::server::LoginResponse; +use solstice_proto::server::LoginResponse; #[derive(Debug, Default)] pub struct LoginHandler; diff --git a/client/src/handlers/set_privileged_users_handler.rs b/client/src/handlers/set_privileged_users_handler.rs index 404d73b..1fc35cf 100644 --- a/client/src/handlers/set_privileged_users_handler.rs +++ b/client/src/handlers/set_privileged_users_handler.rs @@ -2,7 +2,7 @@ use std::io; use crate::context::Context; use crate::message_handler::MessageHandler; -use crate::proto::server::PrivilegedUsersResponse; +use solstice_proto::server::PrivilegedUsersResponse; #[derive(Debug, Default)] pub struct SetPrivilegedUsersHandler; @@ -27,7 +27,7 @@ impl MessageHandler for SetPrivilegedUsersHandler { mod tests { use crate::context::Context; use crate::message_handler::MessageHandler; - use crate::proto::server::PrivilegedUsersResponse; + use solstice_proto::server::PrivilegedUsersResponse; use super::SetPrivilegedUsersHandler; diff --git a/client/src/lib.rs b/client/src/lib.rs deleted file mode 100644 index 95f7e01..0000000 --- a/client/src/lib.rs +++ /dev/null @@ -1,2 +0,0 @@ -mod config; -pub mod proto; diff --git a/client/src/main.rs b/client/src/main.rs index 856d95e..ff586f1 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -6,9 +6,9 @@ use std::thread; use crossbeam_channel; use env_logger; +use solstice_proto; mod client; -mod config; mod context; mod control; mod dispatcher; @@ -16,7 +16,6 @@ mod executor; mod handlers; mod login; mod message_handler; -mod proto; mod room; mod user; @@ -25,7 +24,7 @@ fn main() { let (proto_to_client_tx, proto_to_client_rx) = crossbeam_channel::unbounded(); - let mut proto_agent = match proto::Agent::new(proto_to_client_tx) { + let mut proto_agent = match solstice_proto::Agent::new(proto_to_client_tx) { Ok(agent) => agent, Err(err) => { error!("Error initializing protocol agent: {}", err); diff --git a/client/src/room.rs b/client/src/room.rs index 0e954b4..61575e1 100644 --- a/client/src/room.rs +++ b/client/src/room.rs @@ -3,7 +3,7 @@ use std::error; use std::fmt; use std::mem; -use crate::proto::{server, User}; +use solstice_proto::{server, User}; /// This enumeration is the list of possible membership states for a chat room. #[derive(Clone, Copy, Debug, Eq, PartialEq, RustcDecodable, RustcEncodable)] @@ -358,7 +358,7 @@ impl RoomMap { #[cfg(test)] mod tests { - use crate::proto::server::RoomListResponse; + use solstice_proto::server::RoomListResponse; use super::{Room, RoomMap, Visibility}; diff --git a/client/src/user.rs b/client/src/user.rs index 34855fb..a6b454e 100644 --- a/client/src/user.rs +++ b/client/src/user.rs @@ -2,7 +2,7 @@ use std::collections; use std::error; use std::fmt; -use crate::proto::{User, UserStatus}; +use solstice_proto::{User, UserStatus}; /// The error returned when a user name was not found in the user map. #[derive(Debug)] diff --git a/proto/Cargo.toml b/proto/Cargo.toml new file mode 100644 index 0000000..4215070 --- /dev/null +++ b/proto/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "solstice-proto" +version = "0.1.0" +authors = ["letitz"] +edition = "2018" + +[dependencies] +async-stream = "^0.3" +byteorder = "^0.5.1" +bytes = "^1.0" +crossbeam-channel = "^0.3" +encoding = "^0.2" +encoding_rs = "^0.8" +env_logger = "^0.8" +futures = "^0.3" +log = "^0.4" +mio = "^0.6" +parking_lot = "^0.8" +rust-crypto = "^0.2.34" +rustc-serialize = "^0.3.17" +slab = "^0.2" +thiserror = "^1.0" +tokio = { version = "1", features = ["full"] } +tokio-core = "^0.1" +tokio-io = "^0.1" +tokio-codec = "^0.1" diff --git a/client/src/config.rs b/proto/src/config.rs similarity index 100% rename from client/src/config.rs rename to proto/src/config.rs diff --git a/client/src/proto/core/constants.rs b/proto/src/core/constants.rs similarity index 100% rename from client/src/proto/core/constants.rs rename to proto/src/core/constants.rs diff --git a/client/src/proto/core/frame.rs b/proto/src/core/frame.rs similarity index 100% rename from client/src/proto/core/frame.rs rename to proto/src/core/frame.rs diff --git a/client/src/proto/core/mod.rs b/proto/src/core/mod.rs similarity index 100% rename from client/src/proto/core/mod.rs rename to proto/src/core/mod.rs diff --git a/client/src/proto/core/prefix.rs b/proto/src/core/prefix.rs similarity index 96% rename from client/src/proto/core/prefix.rs rename to proto/src/core/prefix.rs index 1148b82..04dfb3f 100644 --- a/client/src/proto/core/prefix.rs +++ b/proto/src/core/prefix.rs @@ -5,7 +5,7 @@ use std::convert::TryFrom; use bytes::BytesMut; -use crate::proto::core::u32::{encode_u32, U32_BYTE_LEN}; +use crate::core::u32::{encode_u32, U32_BYTE_LEN}; /// Helper for writing length-prefixed values into buffers, without having to /// know the length ahead of encoding time. @@ -87,7 +87,7 @@ mod tests { use bytes::{BufMut, BytesMut}; - use crate::proto::core::u32::{decode_u32, U32_BYTE_LEN}; + use crate::core::u32::{decode_u32, U32_BYTE_LEN}; #[test] fn finalize_empty() { diff --git a/client/src/proto/core/u32.rs b/proto/src/core/u32.rs similarity index 100% rename from client/src/proto/core/u32.rs rename to proto/src/core/u32.rs diff --git a/client/src/proto/core/user.rs b/proto/src/core/user.rs similarity index 98% rename from client/src/proto/core/user.rs rename to proto/src/core/user.rs index 7cb235a..90557c0 100644 --- a/client/src/proto/core/user.rs +++ b/proto/src/core/user.rs @@ -1,10 +1,10 @@ use std::io; -use crate::proto::core::value::{ +use crate::core::value::{ ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError, ValueEncoder, }; -use crate::proto::{ +use crate::{ MutPacket, Packet, PacketReadError, ReadFromPacket, WriteToPacket, }; diff --git a/client/src/proto/core/value.rs b/proto/src/core/value.rs similarity index 100% rename from client/src/proto/core/value.rs rename to proto/src/core/value.rs diff --git a/client/src/proto/handler.rs b/proto/src/handler.rs similarity index 100% rename from client/src/proto/handler.rs rename to proto/src/handler.rs diff --git a/client/src/proto/mod.rs b/proto/src/lib.rs similarity index 93% rename from client/src/proto/mod.rs rename to proto/src/lib.rs index bff13f2..f09e9c5 100644 --- a/client/src/proto/mod.rs +++ b/proto/src/lib.rs @@ -1,3 +1,4 @@ +pub mod config; mod core; mod handler; mod packet; diff --git a/client/src/proto/packet.rs b/proto/src/packet.rs similarity index 99% rename from client/src/proto/packet.rs rename to proto/src/packet.rs index d4510e4..085749e 100644 --- a/client/src/proto/packet.rs +++ b/proto/src/packet.rs @@ -11,7 +11,7 @@ use encoding::{DecoderTrap, EncoderTrap, Encoding}; #[allow(deprecated)] use mio::deprecated::TryRead; -use crate::proto::core::constants::*; +use crate::core::constants::*; /*==================* * READ-ONLY PACKET * diff --git a/client/src/proto/peer/constants.rs b/proto/src/peer/constants.rs similarity index 100% rename from client/src/proto/peer/constants.rs rename to proto/src/peer/constants.rs diff --git a/client/src/proto/peer/message.rs b/proto/src/peer/message.rs similarity index 95% rename from client/src/proto/peer/message.rs rename to proto/src/peer/message.rs index 597495d..a9444a2 100644 --- a/client/src/proto/peer/message.rs +++ b/proto/src/peer/message.rs @@ -2,12 +2,12 @@ use std::io; use log::warn; -use crate::proto::core::value::{ +use crate::core::value::{ ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError, ValueEncoder, }; -use crate::proto::peer::constants::*; -use crate::proto::{ +use crate::peer::constants::*; +use crate::{ MutPacket, Packet, PacketReadError, ReadFromPacket, WriteToPacket, }; @@ -168,8 +168,8 @@ impl ValueDecode for PeerInit { mod tests { use bytes::BytesMut; - use crate::proto::core::value::tests::roundtrip; - use crate::proto::core::value::{ValueDecodeError, ValueDecoder}; + use crate::core::value::tests::roundtrip; + use crate::core::value::{ValueDecodeError, ValueDecoder}; use super::*; diff --git a/client/src/proto/peer/mod.rs b/proto/src/peer/mod.rs similarity index 100% rename from client/src/proto/peer/mod.rs rename to proto/src/peer/mod.rs diff --git a/client/src/proto/server/client.rs b/proto/src/server/client.rs similarity index 97% rename from client/src/proto/server/client.rs rename to proto/src/server/client.rs index 3039ad2..a53bb0c 100644 --- a/client/src/proto/server/client.rs +++ b/proto/src/server/client.rs @@ -7,8 +7,8 @@ use log::{debug, info}; use thiserror::Error; use tokio::net; -use crate::proto::core::frame::FrameStream; -use crate::proto::server::{ +use crate::core::frame::FrameStream; +use crate::server::{ Credentials, LoginResponse, ServerRequest, ServerResponse, Version, }; @@ -178,14 +178,14 @@ mod tests { use tokio::net; use tokio::sync::mpsc; - use crate::proto::server::testing::{ + use crate::server::testing::{ ServerBuilder, ShutdownType, UserStatusMap, }; - use crate::proto::server::{ + use crate::server::{ Credentials, ServerRequest, ServerResponse, UserStatusRequest, UserStatusResponse, }; - use crate::proto::UserStatus; + use crate::UserStatus; use super::{Client, ClientOptions, Version}; diff --git a/client/src/proto/server/constants.rs b/proto/src/server/constants.rs similarity index 100% rename from client/src/proto/server/constants.rs rename to proto/src/server/constants.rs diff --git a/client/src/proto/server/credentials.rs b/proto/src/server/credentials.rs similarity index 96% rename from client/src/proto/server/credentials.rs rename to proto/src/server/credentials.rs index b251bae..15a723d 100644 --- a/client/src/proto/server/credentials.rs +++ b/proto/src/server/credentials.rs @@ -3,7 +3,7 @@ use crypto::digest::Digest; use crypto::md5::Md5; -use crate::proto::server::{LoginRequest, Version}; +use crate::server::{LoginRequest, Version}; /// Credentials for logging in a client to a server. #[derive(Debug, Eq, PartialEq)] @@ -62,7 +62,7 @@ impl Credentials { #[cfg(test)] mod tests { - use crate::proto::server::{LoginRequest, Version}; + use crate::server::{LoginRequest, Version}; use super::Credentials; diff --git a/client/src/proto/server/mod.rs b/proto/src/server/mod.rs similarity index 100% rename from client/src/proto/server/mod.rs rename to proto/src/server/mod.rs diff --git a/client/src/proto/server/request.rs b/proto/src/server/request.rs similarity index 98% rename from client/src/proto/server/request.rs rename to proto/src/server/request.rs index a451626..5c3d64f 100644 --- a/client/src/proto/server/request.rs +++ b/proto/src/server/request.rs @@ -1,11 +1,11 @@ use std::io; -use crate::proto::core::value::{ +use crate::core::value::{ ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError, ValueEncoder, }; -use crate::proto::packet::{MutPacket, WriteToPacket}; -use crate::proto::server::constants::*; +use crate::packet::{MutPacket, WriteToPacket}; +use crate::server::constants::*; /*================* * SERVER REQUEST * @@ -639,8 +639,8 @@ impl ValueDecode for UserStatusRequest { mod tests { use bytes::BytesMut; - use crate::proto::core::value::tests::roundtrip; - use crate::proto::core::value::{ValueDecodeError, ValueDecoder}; + use crate::core::value::tests::roundtrip; + use crate::core::value::{ValueDecodeError, ValueDecoder}; use super::*; diff --git a/client/src/proto/server/response.rs b/proto/src/server/response.rs similarity index 99% rename from client/src/proto/server/response.rs rename to proto/src/server/response.rs index 8d7192c..7419e70 100644 --- a/client/src/proto/server/response.rs +++ b/proto/src/server/response.rs @@ -2,13 +2,13 @@ use std::net; use log::{debug, error, warn}; -use crate::proto::core::value::{ +use crate::core::value::{ ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError, ValueEncoder, }; -use crate::proto::packet::{Packet, PacketReadError, ReadFromPacket}; -use crate::proto::server::constants::*; -use crate::proto::{User, UserStatus}; +use crate::packet::{Packet, PacketReadError, ReadFromPacket}; +use crate::server::constants::*; +use crate::{User, UserStatus}; /*=================* * SERVER RESPONSE * @@ -1442,8 +1442,8 @@ mod tests { use bytes::BytesMut; - use crate::proto::core::value::tests::roundtrip; - use crate::proto::core::value::{ValueDecodeError, ValueDecoder}; + use crate::core::value::tests::roundtrip; + use crate::core::value::{ValueDecodeError, ValueDecoder}; use super::*; diff --git a/client/src/proto/server/testing.rs b/proto/src/server/testing.rs similarity index 99% rename from client/src/proto/server/testing.rs rename to proto/src/server/testing.rs index b9eeeeb..3246d1c 100644 --- a/client/src/proto/server/testing.rs +++ b/proto/src/server/testing.rs @@ -12,8 +12,8 @@ use tokio::sync::mpsc; use tokio::sync::oneshot; use tokio::sync::watch; -use crate::proto::core::frame::FrameStream; -use crate::proto::server::{ +use crate::core::frame::FrameStream; +use crate::server::{ LoginResponse, ServerRequest, ServerResponse, UserStatusRequest, UserStatusResponse, }; diff --git a/client/src/proto/server/version.rs b/proto/src/server/version.rs similarity index 100% rename from client/src/proto/server/version.rs rename to proto/src/server/version.rs diff --git a/client/src/proto/stream.rs b/proto/src/stream.rs similarity index 100% rename from client/src/proto/stream.rs rename to proto/src/stream.rs diff --git a/client/tests/connect.rs b/proto/tests/connect.rs similarity index 98% rename from client/tests/connect.rs rename to proto/tests/connect.rs index d7b3fbf..d8c7a12 100644 --- a/client/tests/connect.rs +++ b/proto/tests/connect.rs @@ -3,7 +3,7 @@ use tokio::io; use tokio::net; use tokio::sync::mpsc; -use solstice_client::proto::server::{ +use solstice_proto::server::{ Client, ClientOptions, Credentials, ServerRequest, ServerResponse, UserStatusRequest, Version, };