diff --git a/network/examples/chat/Cargo.lock b/network/examples/chat/Cargo.lock index 8839dcce09..9c26fd8f98 100644 --- a/network/examples/chat/Cargo.lock +++ b/network/examples/chat/Cargo.lock @@ -795,6 +795,7 @@ version = "0.1.0" dependencies = [ "async-std", "bincode", + "crossbeam-channel", "futures", "lazy_static", "prometheus", diff --git a/network/examples/fileshare/Cargo.lock b/network/examples/fileshare/Cargo.lock index de5da54e7e..0144ec3ac0 100644 --- a/network/examples/fileshare/Cargo.lock +++ b/network/examples/fileshare/Cargo.lock @@ -886,6 +886,7 @@ version = "0.1.0" dependencies = [ "async-std", "bincode", + "crossbeam-channel", "futures", "lazy_static", "prometheus", diff --git a/network/examples/network-speed/Cargo.lock b/network/examples/network-speed/Cargo.lock index 58b125e281..7cd1b8e982 100644 --- a/network/examples/network-speed/Cargo.lock +++ b/network/examples/network-speed/Cargo.lock @@ -877,6 +877,7 @@ version = "0.1.0" dependencies = [ "async-std", "bincode", + "crossbeam-channel", "futures", "lazy_static", "prometheus", diff --git a/network/src/api.rs b/network/src/api.rs index 47cee1f713..80bf3f1588 100644 --- a/network/src/api.rs +++ b/network/src/api.rs @@ -60,14 +60,10 @@ pub struct Participant { /// /// Unlike [`Network`] and [`Participant`], `Streams` don't implement interior /// mutability, as multiple threads don't need access to the same `Stream`. -/// [`Sync`] is not supported! In that case multiple `Streams` should be used -/// instead. However it's still possible to [`Send`] `Streams`. /// /// [`Networks`]: crate::api::Network /// [`open`]: Participant::open /// [`opened`]: Participant::opened -/// [`Send`]: std::marker::Send -/// [`Sync`]: std::marker::Sync #[derive(Debug)] pub struct Stream { pid: Pid, diff --git a/server/src/client.rs b/server/src/client.rs index 43803a42ae..6de7d502b3 100644 --- a/server/src/client.rs +++ b/server/src/client.rs @@ -7,7 +7,7 @@ use vek::*; pub struct Client { pub client_state: ClientState, - pub singleton_stream: std::sync::Mutex, + pub singleton_stream: Stream, pub last_ping: f64, pub login_msg_sent: bool, } @@ -17,9 +17,7 @@ impl Component for Client { } impl Client { - pub fn notify(&mut self, msg: ServerMsg) { - let _ = self.singleton_stream.lock().unwrap().send(msg); - } + pub fn notify(&mut self, msg: ServerMsg) { let _ = self.singleton_stream.send(msg); } pub fn is_registered(&self) -> bool { match self.client_state { @@ -39,16 +37,12 @@ impl Client { self.client_state = new_state; let _ = self .singleton_stream - .lock() - .unwrap() .send(ServerMsg::StateAnswer(Ok(new_state))); } pub fn error_state(&mut self, error: RequestStateError) { let _ = self .singleton_stream - .lock() - .unwrap() .send(ServerMsg::StateAnswer(Err((error, self.client_state)))); } } diff --git a/server/src/lib.rs b/server/src/lib.rs index 753d2b1fb4..1817330397 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -601,7 +601,7 @@ impl Server { let mut client = Client { client_state: ClientState::Connected, - singleton_stream: std::sync::Mutex::new(singleton_stream), + singleton_stream, last_ping: self.state.get_time(), login_msg_sent: false, }; diff --git a/server/src/sys/message.rs b/server/src/sys/message.rs index b13fe3753e..1cc98d53ad 100644 --- a/server/src/sys/message.rs +++ b/server/src/sys/message.rs @@ -57,7 +57,7 @@ impl Sys { settings: &Read<'_, ServerSettings>, ) -> Result<(), crate::error::Error> { loop { - let msg = client.singleton_stream.lock().unwrap().recv().await?; + let msg = client.singleton_stream.recv().await?; *cnt += 1; match msg { // Go back to registered state (char selection screen)