Make tangled not duplicate Connected events

This commit is contained in:
IQuant 2024-10-13 13:06:05 +03:00
parent 959e7fc88e
commit dc5b279253
3 changed files with 33 additions and 6 deletions

View file

@ -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(

View file

@ -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,

View file

@ -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<Settings> = 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);
}
}