You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.4 KiB
52 lines
1.4 KiB
using System.Collections.Generic;
|
|
using System.Threading;
|
|
|
|
namespace FlyingWormConsole3.LiteNetLib
|
|
{
|
|
internal abstract class BaseChannel
|
|
{
|
|
protected readonly NetPeer Peer;
|
|
protected readonly Queue<NetPacket> OutgoingQueue;
|
|
private int _isAddedToPeerChannelSendQueue;
|
|
|
|
public int PacketsInQueue
|
|
{
|
|
get { return OutgoingQueue.Count; }
|
|
}
|
|
|
|
protected BaseChannel(NetPeer peer)
|
|
{
|
|
Peer = peer;
|
|
OutgoingQueue = new Queue<NetPacket>(64);
|
|
}
|
|
|
|
public void AddToQueue(NetPacket packet)
|
|
{
|
|
lock (OutgoingQueue)
|
|
{
|
|
OutgoingQueue.Enqueue(packet);
|
|
}
|
|
AddToPeerChannelSendQueue();
|
|
}
|
|
|
|
protected void AddToPeerChannelSendQueue()
|
|
{
|
|
if (Interlocked.CompareExchange(ref _isAddedToPeerChannelSendQueue, 1, 0) == 0)
|
|
{
|
|
Peer.AddToReliableChannelSendQueue(this);
|
|
}
|
|
}
|
|
|
|
public bool SendAndCheckQueue()
|
|
{
|
|
bool hasPacketsToSend = SendNextPackets();
|
|
if (!hasPacketsToSend)
|
|
Interlocked.Exchange(ref _isAddedToPeerChannelSendQueue, 0);
|
|
|
|
return hasPacketsToSend;
|
|
}
|
|
|
|
protected abstract bool SendNextPackets();
|
|
public abstract bool ProcessPacket(NetPacket packet);
|
|
}
|
|
}
|