示例#1
0
        private void pingCompleted(object sender, PingCompletedEventArgs e)
        {
            if (!Global.IPAddresses.isCompleted)
            {
                lock (_lockObject)
                {
                    Global.IPAddresses.Increment();

                    Ping ping = (Ping)sender;
                    ping.SendPingAsync(Global.IPAddresses.Current, Timeout);
                }
            }
            else
            {
                OnComplete?.Invoke();
                (sender as Ping).Dispose();
            }


            if (e.Reply.Status == IPStatus.Success)
            {
                Insert(e.Reply);
                lock (_lockObject)
                {
                    Global.IPAddresses.RepliedCount++;
                }

                OnPingReply?.Invoke(e.Reply, Global.IPAddresses.RepliedCount);
            }

            OnProgress?.Invoke(Global.IPAddresses.Current, Global.IPAddresses.PingedCount);
        }
示例#2
0
        private void HandleMessageUnsafe(NetworkMessage message, MessageEnvelope envelope)
        {
            // Logger.LogTrace($"Processing network message {message.MessageCase}");
            if (envelope.PublicKey is null)
            {
                throw new InvalidOperationException();
            }
            switch (message.MessageCase)
            {
            case NetworkMessage.MessageOneofCase.PingReply:
                OnPingReply?.Invoke(this, (message.PingReply, envelope.PublicKey));
                break;

            case NetworkMessage.MessageOneofCase.SyncBlocksRequest:
                OnSyncBlocksRequest?.Invoke(this, (message.SyncBlocksRequest, SendTo(envelope.RemotePeer)));
                break;

            case NetworkMessage.MessageOneofCase.SyncBlocksReply:
                OnSyncBlocksReply?.Invoke(this, (message.SyncBlocksReply, envelope.PublicKey));
                break;

            case NetworkMessage.MessageOneofCase.SyncPoolRequest:
                OnSyncPoolRequest?.Invoke(this, (message.SyncPoolRequest, SendTo(envelope.RemotePeer)));
                break;

            case NetworkMessage.MessageOneofCase.SyncPoolReply:
                OnSyncPoolReply?.Invoke(this, (message.SyncPoolReply, envelope.PublicKey));
                break;

            case NetworkMessage.MessageOneofCase.Ack:
                break;

            case NetworkMessage.MessageOneofCase.ConsensusMessage:
                OnConsensusMessage?.Invoke(this, (message.ConsensusMessage, envelope.PublicKey));
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(message),
                                                      "Unable to resolve message type (" + message.MessageCase + ") from protobuf structure");
            }
        }