private void Peer_OnDisconnect(PeerConnection sender) { _peerEvent.WaitOne(); try { _logger.LogInformation($"Peer disconnect {sender.RemoteId} {sender.RemoteEndPoint}"); _peerConnections.Remove(sender); sender.Close(); } catch (Exception ex) { _logger.LogError($"Disconnect error ({sender.RemoteId}) - {ex.Message}"); } finally { _peerEvent.Set(); } }
private void Peer_OnIdentify(PeerConnection sender) { _logger.LogInformation($"Peer identify {sender.RemoteEndPoint} - {sender.RemoteId}"); if (!string.IsNullOrEmpty(sender.ConnectionString)) { var peers = _peerRoundRobin.Where(x => x.ConnectionString == sender.ConnectionString); foreach (var peer in peers) { peer.NodeId = sender.RemoteId; } } //remove duplicate connections lock (_duplicateLock) { var peers = GetActivePeers(); foreach (var peer in peers.Where(x => x.RemoteId == sender.RemoteId && x != sender)) { peer.Disconnect(); peer.Close(); } } //remove connection to self if (sender.RemoteId == NodeId) { if (!string.IsNullOrEmpty(sender.ConnectionString)) { var selfs = _peerRoundRobin.Where(x => x.ConnectionString == sender.ConnectionString); foreach (var self in selfs) { self.IsSelf = true; } } sender.Disconnect(); sender.Close(); } }