コード例 #1
0
        public ExampleNetworkProtocolMessageSerializer(ILogger <ExampleNetworkProtocolMessageSerializer> logger, INetworkMessageSerializerManager networkMessageSerializerManager)
        {
            _logger = logger;
            _networkMessageSerializerManager = networkMessageSerializerManager;
            _deserializationContext          = new DeserializationContext(ProtocolDefinition.MagicBytes);

            _peerContext = null !; //initialized by SetPeerContext
        }
コード例 #2
0
        public override void Serialize(PingMessage message, int protocolVersion, ExamplePeerContext peerContext, IBufferWriter <byte> output)
        {
            // suppose we created the nonce parameter in version 2, we wouldn't serialize this field if we are talking with a V2 peer
            if (protocolVersion < KnownVersion.V2)
            {
                return;
            }

            output.WriteULong(message.Nonce);
        }
コード例 #3
0
        public void SetPeerContext(IPeerContext peerContext)
        {
            // we know it's an ExamplePeerContext in our example.
            _peerContext = (ExamplePeerContext)peerContext;

            if (_peerContext.MyExtraInformation != null)
            {
                _logger.LogDebug("I'm ExampleNetworkProtocolMessageSerializer and I know that I've some information for you: {AdditionalInformation}", _peerContext.MyExtraInformation);
            }
        }
コード例 #4
0
        public override void Serialize(VersionMessage message, int protocolVersion, ExamplePeerContext peerContext, IBufferWriter <byte> output)
        {
            // outgoing version message doesn't have to look into passed protocolVersion but rely on it's message.Version.
            protocolVersion = message.Version;

            output.WriteInt(message.Version);
            output.WriteLong(message.Timestamp.ToUnixTimeSeconds());
            output.WriteULong(message.Nonce);

            if (protocolVersion < 3)
            {
                return;
            }

            output.WriteVarString(message.UserAgent !);
        }
コード例 #5
0
 public override VerackMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, ExamplePeerContext peerContext)
 {
     // having a singleton verack is fine because it contains no data
     return(_instance);
 }
コード例 #6
0
 public override void Serialize(VerackMessage message, int protocolVersion, ExamplePeerContext peerContext, IBufferWriter <byte> output)
 {
     //NOP
 }
コード例 #7
0
        public override VersionMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, ExamplePeerContext peerContext)
        {
            var message = new VersionMessage
            {
                Version   = reader.ReadInt(),
                Timestamp = DateTimeOffset.FromUnixTimeSeconds(reader.ReadLong()),
                Nonce     = reader.ReadULong(),
            };

            if (protocolVersion < 3)
            {
                return(message);
            }

            message.UserAgent = reader.ReadVarString();

            return(message);
        }
コード例 #8
0
        public override PingMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, ExamplePeerContext peerContext)
        {
            var message = new PingMessage();

            // suppose we created the nonce parameter in version 2, we can't expect to receive this value from a peer on version prior to V2 peer payload
            if (protocolVersion < KnownVersion.V2)
            {
                return(message);
            }

            message.Nonce = reader.ReadULong();

            return(message);
        }
コード例 #9
0
 public override PongMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, ExamplePeerContext peerContext)
 {
     return(new PongMessage
     {
         PongFancyResponse = reader.ReadWithSerializer(protocolVersion, _pongFancyResponseSerializator)
     });
 }
コード例 #10
0
 public override void Serialize(PongMessage message, int protocolVersion, ExamplePeerContext peerContext, IBufferWriter <byte> output)
 {
     output.WriteWithSerializer(message.PongFancyResponse !, protocolVersion, _pongFancyResponseSerializator);
 }