public ExampleNetworkProtocolMessageSerializer(ILogger <ExampleNetworkProtocolMessageSerializer> logger, INetworkMessageSerializerManager networkMessageSerializerManager) { _logger = logger; _networkMessageSerializerManager = networkMessageSerializerManager; _deserializationContext = new DeserializationContext(ProtocolDefinition.MagicBytes); _peerContext = null !; //initialized by SetPeerContext }
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); }
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); } }
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 !); }
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); }
public override void Serialize(VerackMessage message, int protocolVersion, ExamplePeerContext peerContext, IBufferWriter <byte> output) { //NOP }
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); }
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); }
public override PongMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, ExamplePeerContext peerContext) { return(new PongMessage { PongFancyResponse = reader.ReadWithSerializer(protocolVersion, _pongFancyResponseSerializator) }); }
public override void Serialize(PongMessage message, int protocolVersion, ExamplePeerContext peerContext, IBufferWriter <byte> output) { output.WriteWithSerializer(message.PongFancyResponse !, protocolVersion, _pongFancyResponseSerializator); }