Cleanup in Connection
This commit is contained in:
@@ -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 });
|
||||||
|
|||||||
Reference in New Issue
Block a user