Пример #1
0
        private void OnDisconnectPeerWithTracker(object sender, MessageEventArgs e)
        {
            var message = e.Message as PeerDisconnectMessage;

            if (message.PeerAddress.Equals(Address))
            {
                Status = PeerStatus.Disconnected;
                allPeers.Remove(this);

                CommonHelpers.LogPeers(allPeers);
            }
        }
Пример #2
0
        private void OnPeerHashMessageDirect(PeerHashMessage message)
        {
            if (message.PeerHash != string.Empty && message.PeerHash != null)
            {
                Hash   = message.PeerHash;
                Status = PeerStatus.Connected;

                CommonHelpers.LogPeers(allPeers);

                //возможно стоит отключить повторную отправку сообщения, чтобы они не дублировались
                if (message.NeedResponse == true)
                {
                    var messageToSend = new PeerHashMessage(VotingsUser.PublicKey, false);
                    Connection.SendObject(messageToSend.GetType().Name, messageToSend);
                }
            }
        }
Пример #3
0
        private void OnPeerHashMessageWithTracker(object sender, MessageEventArgs e)
        {
            var message = e.Message as PeerHashMessage;

            if (e.SenderAddress.Equals(Address) && message.PeerHash != string.Empty)
            {
                Hash   = message.PeerHash;
                Status = PeerStatus.Connected;

                CommonHelpers.LogPeers(allPeers);

                if (message.NeedResponse == true)
                {
                    var messageToSend = new PeerHashMessage(Hash, false);
                    tracker.SendMessageToPeer(messageToSend, this);
                }
            }
        }
Пример #4
0
        public void DisconnectAny(bool sendMessage = true)
        {
            allPeers.Remove(this);

            CommonHelpers.LogPeers(allPeers);

            try
            {
                if (sendMessage)
                {
                    var message = new PeerDisconnectMessage(CommonHelpers.GetLocalEndPoint(CommonHelpers.PeerPort));

                    if (ConnectionMode == ConnectionMode.Direct)
                    {
                        Connection.SendObject(message.GetType().Name, message);
                    }
                    else
                    {
                        tracker.SendMessageToPeer(message, this);
                    }
                }

                Task.Run(() =>
                {
                    try
                    {
                        Connection?.Dispose();
                        Connection = null;
                    }
                    catch { }
                });
            }
            catch { }

            Status = PeerStatus.Disconnected;
        }