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); } }
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); } } }
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); } } }
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; }