diff --git a/noita-proxy/src/net.rs b/noita-proxy/src/net.rs index 3c819a2e..3ca0be65 100644 --- a/noita-proxy/src/net.rs +++ b/noita-proxy/src/net.rs @@ -166,9 +166,9 @@ impl NetManager { fn clean_dir(path: PathBuf) { let tmp = path.parent().unwrap().join("tmp"); if tmp.exists() { - remove_dir_all(tmp.clone()).unwrap(); + remove_dir_all(tmp.clone()).ok(); } - create_dir(tmp).unwrap(); + create_dir(tmp).ok(); } pub(crate) fn start_inner( diff --git a/noita-proxy/tangled/src/connection_manager.rs b/noita-proxy/tangled/src/connection_manager.rs index dc559c23..f4aaaf46 100644 --- a/noita-proxy/tangled/src/connection_manager.rs +++ b/noita-proxy/tangled/src/connection_manager.rs @@ -297,15 +297,21 @@ impl ConnectionManager { async fn handle_internal_event(&mut self, ev: InternalEvent) { match ev { InternalEvent::Connected(peer_id) => { - info!("Peer {} connected", peer_id); + if self.shared.remote_peers.contains_key(&peer_id) { + // Already connected, no need to emit an event. + return; + } self.shared .inbound_channel .0 .send(NetworkEvent::PeerConnected(peer_id)) .expect("channel to be open"); - self.shared - .remote_peers - .insert(peer_id, RemotePeer); + self.shared.remote_peers.insert(peer_id, RemotePeer); + info!( + "Peer {} connected, total connected: {}", + peer_id, + self.shared.remote_peers.len() + ); if self.is_server { self.server_broadcast_internal_message( PeerId::HOST, diff --git a/noita-proxy/tangled/src/lib.rs b/noita-proxy/tangled/src/lib.rs index 7395e16e..83e56292 100644 --- a/noita-proxy/tangled/src/lib.rs +++ b/noita-proxy/tangled/src/lib.rs @@ -233,4 +233,25 @@ mod test { Some(NetworkEvent::PeerConnected(PeerId(0))) ); } + + #[test_log::test(tokio::test)] + async fn test_single_connection_event() { + let settings: Option = Some(Default::default()); + let addr = "127.0.0.1:56004".parse().unwrap(); + let host = Peer::host(addr, settings.clone()).unwrap(); + assert_eq!(host.shared.remote_peers.len(), 1); + let peer1 = Peer::connect(addr, settings.clone()).unwrap(); + tokio::time::sleep(Duration::from_millis(10)).await; + + assert_eq!( + peer1.recv().next(), + Some(NetworkEvent::PeerConnected(PeerId(0))) + ); + assert_eq!( + peer1.recv().next(), + Some(NetworkEvent::PeerConnected(PeerId(1))) + ); + + assert_eq!(peer1.recv().next(), None); + } }