diff --git a/Cargo.lock b/Cargo.lock index f944257..baf210e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -72,6 +72,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" +[[package]] +name = "base64" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d1ccbaf7d9ec9537465a97bf19edc1a4e158ecb49fc16178202238c569cc42" + [[package]] name = "bitflags" version = "1.2.1" @@ -430,6 +436,7 @@ dependencies = [ "futures", "futures-util", "lazy_static", + "orion", "serde", "serde_json", "structopt", @@ -483,6 +490,18 @@ version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1c601810575c99596d4afc46f78a678c80105117c379eb3650cf99b8a21ce5b" +[[package]] +name = "orion" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2dd0d645e94ec75aacc27460cb68438263342f4e4e1aeaf7af67847687e7a8" +dependencies = [ + "base64", + "getrandom", + "subtle", + "zeroize", +] + [[package]] name = "pin-project" version = "0.4.15" @@ -697,6 +716,12 @@ dependencies = [ "syn", ] +[[package]] +name = "subtle" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c65d530b10ccaeac294f349038a597e435b18fb456aadd0840a623f83b9e941" + [[package]] name = "syn" version = "1.0.19" @@ -835,3 +860,9 @@ dependencies = [ "winapi 0.2.8", "winapi-build", ] + +[[package]] +name = "zeroize" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cbac2ed2ba24cc90f5e06485ac8c7c1e5449fe8911aef4d8877218af021a5b8" diff --git a/Cargo.toml b/Cargo.toml index 77e6568..6e0a6d6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,3 +15,4 @@ structopt = "0.3.14" chrono = "0.4.11" futures = "0.3.5" toml = "0.5.6" +orion = "0.15.1" diff --git a/src/lib.rs b/src/lib.rs index b386b5f..714cc07 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,6 @@ // modules mod client; mod config; -#[allow(dead_code)] mod packet; mod server; diff --git a/src/packet/join.rs b/src/packet/join.rs index 0f82a9f..e0b759a 100644 --- a/src/packet/join.rs +++ b/src/packet/join.rs @@ -3,7 +3,7 @@ use crate::Result; use chrono::prelude::*; use serde::{Deserialize, Serialize}; -#[derive(Deserialize, Serialize, Debug)] +#[derive(Deserialize, Serialize, Debug, Clone)] pub struct Join { user: String, timestamp: i64, diff --git a/src/packet/message.rs b/src/packet/message.rs index b30f6eb..ee6e1a4 100644 --- a/src/packet/message.rs +++ b/src/packet/message.rs @@ -5,7 +5,7 @@ use chrono::prelude::*; use serde::{Deserialize, Serialize}; /// a Message -#[derive(Deserialize, Serialize, Debug)] +#[derive(Deserialize, Serialize, Debug, Clone)] pub struct Message { user: String, contents: String, diff --git a/src/server.rs b/src/server.rs index 400beea..b4c83df 100644 --- a/src/server.rs +++ b/src/server.rs @@ -8,8 +8,7 @@ use async_std::{ task, }; use futures::io::{ReadHalf, WriteHalf}; -use futures_util::io::AsyncReadExt; -use futures_util::stream::StreamExt; +use futures_util::{io::AsyncReadExt, stream::StreamExt}; use lazy_static::lazy_static; use std::{collections::HashMap, sync::Mutex}; use uuid::Uuid; @@ -62,10 +61,12 @@ async fn handle_stream(mut stream: ReadHalf, stream_id: Uuid) -> Resu PacketType::Message => { let msg = Message::from_packet(packet)?; println!("{:?}", msg); + task::spawn(relay_packet(msg)); } PacketType::Join => { let join = Join::from_packet(packet)?; println!("{:?}", join); + task::spawn(relay_packet(join)); } } @@ -83,12 +84,10 @@ async fn relay_packet(packet: T) -> Result<()> { let stream = futures::stream::iter(locked_write_streams.iter_mut()); let packet = &packet; - stream - .for_each_concurrent(None, |(_, mut stream)| async move { - let packet = packet.clone().to_packet().expect("failed to convert to packet"); - // in case any of the writes fail just ignore them - let _ = packet.write(&mut stream); - }) - .await; + stream.for_each_concurrent(None, |(_, mut stream)| async move { + let packet = packet.clone().to_packet().expect("failed to convert to packet"); + // in case any of the writes fail just ignore them + let _ = packet.write(&mut stream); + }); Ok(()) }