You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/Plugins/ConsolePro/Remote/LiteNetLib/SequencedChannel.cs

54 lines
1.4 KiB
C#

#if DEBUG && !UNITY_WP_8_1 && !UNITY_WSA
using System.Collections.Generic;
namespace FlyingWormConsole3.LiteNetLib
{
internal sealed class SequencedChannel
{
private ushort _localSequence;
private ushort _remoteSequence;
private readonly Queue<NetPacket> _outgoingPackets;
private readonly NetPeer _peer;
public SequencedChannel(NetPeer peer)
{
_outgoingPackets = new Queue<NetPacket>();
_peer = peer;
}
public void AddToQueue(NetPacket packet)
{
lock (_outgoingPackets)
{
_outgoingPackets.Enqueue(packet);
}
}
public bool SendNextPacket()
{
NetPacket packet;
lock (_outgoingPackets)
{
if (_outgoingPackets.Count == 0)
return false;
packet = _outgoingPackets.Dequeue();
}
_localSequence++;
packet.Sequence = _localSequence;
_peer.SendRawData(packet);
_peer.Recycle(packet);
return true;
}
public void ProcessPacket(NetPacket packet)
{
if (NetUtils.RelativeSequenceNumber(packet.Sequence, _remoteSequence) > 0)
{
_remoteSequence = packet.Sequence;
_peer.AddIncomingPacket(packet);
}
}
}
}
#endif