Use synchronous packet (de)serialization
This commit is contained in:
parent
6548da76ad
commit
b95f417abf
|
@ -7,15 +7,13 @@ internal sealed class GoodbyePacket : Packet
|
||||||
{
|
{
|
||||||
public string Message { get; set; }
|
public string Message { get; set; }
|
||||||
|
|
||||||
protected override Task DeserializeAsync(ProtocolReader reader)
|
protected override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
Message = reader.ReadString();
|
Message = reader.ReadString();
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Task SerializeAsync(ProtocolWriter writer)
|
protected override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write(Message);
|
writer.Write(Message);
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,15 +7,13 @@ internal sealed class HelloPacket : Packet
|
||||||
{
|
{
|
||||||
public string Message { get; set; }
|
public string Message { get; set; }
|
||||||
|
|
||||||
protected override Task DeserializeAsync(ProtocolReader reader)
|
protected override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
Message = reader.ReadString();
|
Message = reader.ReadString();
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Task SerializeAsync(ProtocolWriter writer)
|
protected override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write(Message);
|
writer.Write(Message);
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,15 +7,13 @@ internal sealed class GoodbyePacket : Packet
|
||||||
{
|
{
|
||||||
public string Message { get; set; }
|
public string Message { get; set; }
|
||||||
|
|
||||||
protected override Task DeserializeAsync(ProtocolReader reader)
|
protected override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
Message = reader.ReadString();
|
Message = reader.ReadString();
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Task SerializeAsync(ProtocolWriter writer)
|
protected override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write(Message);
|
writer.Write(Message);
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,15 +7,13 @@ internal sealed class HelloPacket : Packet
|
||||||
{
|
{
|
||||||
public string Message { get; set; }
|
public string Message { get; set; }
|
||||||
|
|
||||||
protected override Task DeserializeAsync(ProtocolReader reader)
|
protected override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
Message = reader.ReadString();
|
Message = reader.ReadString();
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Task SerializeAsync(ProtocolWriter writer)
|
protected override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write(Message);
|
writer.Write(Message);
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,7 +96,7 @@ public abstract class BaseClientNode : Node
|
||||||
int length;
|
int length;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
length = await Task.Run(() => networkReader.ReadInt32(), cancellationToken);
|
length = await Task.Run(networkReader.ReadInt32, cancellationToken);
|
||||||
}
|
}
|
||||||
catch (EndOfStreamException)
|
catch (EndOfStreamException)
|
||||||
{
|
{
|
||||||
|
@ -136,7 +136,7 @@ public abstract class BaseClientNode : Node
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var packet = (Packet) constructor.Invoke(null);
|
var packet = (Packet) constructor.Invoke(null);
|
||||||
await packet.DeserializeAsync(bufferReader);
|
packet.Deserialize(bufferReader);
|
||||||
await targetStream.DisposeAsync();
|
await targetStream.DisposeAsync();
|
||||||
|
|
||||||
if (RegisteredPacketHandlers.TryGetValue(packetType, out IReadOnlyCollection<PacketHandler>? handlers))
|
if (RegisteredPacketHandlers.TryGetValue(packetType, out IReadOnlyCollection<PacketHandler>? handlers))
|
||||||
|
@ -170,7 +170,7 @@ public abstract class BaseClientNode : Node
|
||||||
|
|
||||||
await using var bufferWriter = new ProtocolWriter(targetStream);
|
await using var bufferWriter = new ProtocolWriter(targetStream);
|
||||||
bufferWriter.Write(packet.Id);
|
bufferWriter.Write(packet.Id);
|
||||||
await packet.SerializeAsync(bufferWriter);
|
packet.Serialize(bufferWriter);
|
||||||
await targetStream.FlushAsync(cancellationToken);
|
await targetStream.FlushAsync(cancellationToken);
|
||||||
buffer.Position = 0;
|
buffer.Position = 0;
|
||||||
|
|
||||||
|
|
|
@ -29,11 +29,11 @@ public abstract class Packet
|
||||||
/// Deserializes this packet from the specified reader.
|
/// Deserializes this packet from the specified reader.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="reader">The reader from which this packet should be deserialized.</param>
|
/// <param name="reader">The reader from which this packet should be deserialized.</param>
|
||||||
protected internal abstract Task DeserializeAsync(ProtocolReader reader);
|
protected internal abstract void Deserialize(ProtocolReader reader);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Serializes this packet to the specified writer.
|
/// Serializes this packet to the specified writer.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="writer">The writer to which this packet should be serialized.</param>
|
/// <param name="writer">The writer to which this packet should be serialized.</param>
|
||||||
protected internal abstract Task SerializeAsync(ProtocolWriter writer);
|
protected internal abstract void Serialize(ProtocolWriter writer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,16 +22,14 @@ internal sealed class DisconnectPacket : Packet
|
||||||
public DisconnectReason Reason { get; private set; }
|
public DisconnectReason Reason { get; private set; }
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task DeserializeAsync(ProtocolReader reader)
|
protected internal override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
Reason = (DisconnectReason) reader.ReadByte();
|
Reason = (DisconnectReason) reader.ReadByte();
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task SerializeAsync(ProtocolWriter writer)
|
protected internal override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write((byte) Reason);
|
writer.Write((byte) Reason);
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,26 +41,22 @@ internal sealed class EncryptionRequestPacket : Packet
|
||||||
public byte[] PublicKey { get; private set; }
|
public byte[] PublicKey { get; private set; }
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task DeserializeAsync(ProtocolReader reader)
|
protected internal override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
int length = reader.ReadInt32();
|
int length = reader.ReadInt32();
|
||||||
PublicKey = reader.ReadBytes(length);
|
PublicKey = reader.ReadBytes(length);
|
||||||
|
|
||||||
length = reader.ReadInt32();
|
length = reader.ReadInt32();
|
||||||
Payload = reader.ReadBytes(length);
|
Payload = reader.ReadBytes(length);
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task SerializeAsync(ProtocolWriter writer)
|
protected internal override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write(PublicKey.Length);
|
writer.Write(PublicKey.Length);
|
||||||
writer.Write(PublicKey);
|
writer.Write(PublicKey);
|
||||||
|
|
||||||
writer.Write(Payload.Length);
|
writer.Write(Payload.Length);
|
||||||
writer.Write(Payload);
|
writer.Write(Payload);
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,18 +36,16 @@ internal sealed class HandshakeResponsePacket : Packet
|
||||||
public int ProtocolVersion { get; private set; }
|
public int ProtocolVersion { get; private set; }
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task DeserializeAsync(ProtocolReader reader)
|
protected internal override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
HandshakeResponse = (HandshakeResponse) reader.ReadByte();
|
HandshakeResponse = (HandshakeResponse) reader.ReadByte();
|
||||||
ProtocolVersion = reader.ReadInt32();
|
ProtocolVersion = reader.ReadInt32();
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task SerializeAsync(ProtocolWriter writer)
|
protected internal override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write((byte) HandshakeResponse);
|
writer.Write((byte) HandshakeResponse);
|
||||||
writer.Write(ProtocolVersion);
|
writer.Write(ProtocolVersion);
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,17 +27,17 @@ public sealed class PongPacket : ResponsePacket
|
||||||
public byte[] Payload { get; private set; }
|
public byte[] Payload { get; private set; }
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override async Task DeserializeAsync(ProtocolReader reader)
|
protected internal override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
await base.DeserializeAsync(reader);
|
base.Deserialize(reader);
|
||||||
int length = reader.ReadInt32();
|
int length = reader.ReadInt32();
|
||||||
Payload = reader.ReadBytes(length);
|
Payload = reader.ReadBytes(length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override async Task SerializeAsync(ProtocolWriter writer)
|
protected internal override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
await base.SerializeAsync(writer);
|
base.Serialize(writer);
|
||||||
writer.Write(Payload.Length);
|
writer.Write(Payload.Length);
|
||||||
writer.Write(Payload);
|
writer.Write(Payload);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,16 +24,14 @@ internal sealed class SessionExchangePacket : Packet
|
||||||
public Guid Session { get; private set; }
|
public Guid Session { get; private set; }
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task DeserializeAsync(ProtocolReader reader)
|
protected internal override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
Session = reader.ReadGuid();
|
Session = reader.ReadGuid();
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task SerializeAsync(ProtocolWriter writer)
|
protected internal override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write(Session);
|
writer.Write(Session);
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,26 +41,22 @@ internal sealed class EncryptionResponsePacket : Packet
|
||||||
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task DeserializeAsync(ProtocolReader reader)
|
protected internal override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
int length = reader.ReadInt32();
|
int length = reader.ReadInt32();
|
||||||
SharedSecret = reader.ReadBytes(length);
|
SharedSecret = reader.ReadBytes(length);
|
||||||
|
|
||||||
length = reader.ReadInt32();
|
length = reader.ReadInt32();
|
||||||
Payload = reader.ReadBytes(length);
|
Payload = reader.ReadBytes(length);
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task SerializeAsync(ProtocolWriter writer)
|
protected internal override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write(SharedSecret.Length);
|
writer.Write(SharedSecret.Length);
|
||||||
writer.Write(SharedSecret);
|
writer.Write(SharedSecret);
|
||||||
|
|
||||||
writer.Write(Payload.Length);
|
writer.Write(Payload.Length);
|
||||||
writer.Write(Payload);
|
writer.Write(Payload);
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,16 +26,14 @@ internal sealed class HandshakeRequestPacket : Packet
|
||||||
public int ProtocolVersion { get; private set; }
|
public int ProtocolVersion { get; private set; }
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task DeserializeAsync(ProtocolReader reader)
|
protected internal override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
ProtocolVersion = reader.ReadInt32();
|
ProtocolVersion = reader.ReadInt32();
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task SerializeAsync(ProtocolWriter writer)
|
protected internal override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write(ProtocolVersion);
|
writer.Write(ProtocolVersion);
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,17 +25,17 @@ public sealed class PingPacket : RequestPacket
|
||||||
public byte[] Payload { get; private set; }
|
public byte[] Payload { get; private set; }
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override async Task DeserializeAsync(ProtocolReader reader)
|
protected internal override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
await base.DeserializeAsync(reader);
|
base.Deserialize(reader);
|
||||||
int length = reader.ReadInt32();
|
int length = reader.ReadInt32();
|
||||||
Payload = reader.ReadBytes(length);
|
Payload = reader.ReadBytes(length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override async Task SerializeAsync(ProtocolWriter writer)
|
protected internal override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
await base.SerializeAsync(writer);
|
base.Serialize(writer);
|
||||||
writer.Write(Payload.Length);
|
writer.Write(Payload.Length);
|
||||||
writer.Write(Payload);
|
writer.Write(Payload);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,16 +12,14 @@ public abstract class RequestPacket : Packet
|
||||||
public long CallbackId { get; internal set; }
|
public long CallbackId { get; internal set; }
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task DeserializeAsync(ProtocolReader reader)
|
protected internal override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
CallbackId = reader.ReadInt64();
|
CallbackId = reader.ReadInt64();
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task SerializeAsync(ProtocolWriter writer)
|
protected internal override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write(CallbackId);
|
writer.Write(CallbackId);
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,16 +21,14 @@ public abstract class ResponsePacket : Packet
|
||||||
public long CallbackId { get; private set; }
|
public long CallbackId { get; private set; }
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task DeserializeAsync(ProtocolReader reader)
|
protected internal override void Deserialize(ProtocolReader reader)
|
||||||
{
|
{
|
||||||
CallbackId = reader.ReadInt64();
|
CallbackId = reader.ReadInt64();
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected internal override Task SerializeAsync(ProtocolWriter writer)
|
protected internal override void Serialize(ProtocolWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write(CallbackId);
|
writer.Write(CallbackId);
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue