Cleanup in Connection

This commit is contained in:
teinarss
2021-08-15 15:26:46 +02:00
committed by Paul Chote
parent c860bf19ee
commit b4256df9c1

View File

@@ -45,7 +45,7 @@ namespace OpenRA.Network
public byte[] Data; public byte[] Data;
} }
readonly List<ReceivedPacket> receivedPackets = new List<ReceivedPacket>(); readonly ConcurrentQueue<ReceivedPacket> receivedPackets = new ConcurrentQueue<ReceivedPacket>();
public ReplayRecorder Recorder { get; private set; } public ReplayRecorder Recorder { get; private set; }
public virtual int LocalClientId => 1; public virtual int LocalClientId => 1;
@@ -87,20 +87,12 @@ namespace OpenRA.Network
protected void AddPacket(ReceivedPacket packet) protected void AddPacket(ReceivedPacket packet)
{ {
lock (receivedPackets) receivedPackets.Enqueue(packet);
receivedPackets.Add(packet);
} }
public virtual void Receive(Action<int, byte[]> packetFn) public virtual void Receive(Action<int, byte[]> packetFn)
{ {
ReceivedPacket[] packets; while (receivedPackets.TryDequeue(out var p))
lock (receivedPackets)
{
packets = receivedPackets.ToArray();
receivedPackets.Clear();
}
foreach (var p in packets)
{ {
packetFn(p.FromClient, p.Data); packetFn(p.FromClient, p.Data);
Recorder?.Receive(p.FromClient, p.Data); Recorder?.Receive(p.FromClient, p.Data);
@@ -222,20 +214,20 @@ namespace OpenRA.Network
{ {
try try
{ {
var reader = new BinaryReader(tcp.GetStream()); var stream = tcp.GetStream();
var handshakeProtocol = reader.ReadInt32(); var handshakeProtocol = stream.ReadInt32();
if (handshakeProtocol != ProtocolVersion.Handshake) if (handshakeProtocol != ProtocolVersion.Handshake)
throw new InvalidOperationException($"Handshake protocol version mismatch. Server={handshakeProtocol} Client={ProtocolVersion.Handshake}"); throw new InvalidOperationException($"Handshake protocol version mismatch. Server={handshakeProtocol} Client={ProtocolVersion.Handshake}");
clientId = reader.ReadInt32(); clientId = stream.ReadInt32();
connectionState = ConnectionState.Connected; connectionState = ConnectionState.Connected;
while (true) while (true)
{ {
var len = reader.ReadInt32(); var len = stream.ReadInt32();
var client = reader.ReadInt32(); var client = stream.ReadInt32();
var buf = reader.ReadBytes(len); var buf = stream.ReadBytes(len);
if (len == 0) if (len == 0)
throw new NotImplementedException(); throw new NotImplementedException();
AddPacket(new ReceivedPacket { FromClient = client, Data = buf }); AddPacket(new ReceivedPacket { FromClient = client, Data = buf });