Esempio n. 1
0
 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();
     }
 }
Esempio n. 2
0
        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();
            }
        }