ab56a9bcf7
SVN-Revision: r240
68 lines
2.1 KiB
C#
68 lines
2.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace Lskj.SocketService
|
|
{
|
|
struct SendBufferPacket
|
|
{
|
|
public int Offset;
|
|
public int Count;
|
|
}
|
|
|
|
//由于是异步发送,有可能接收到两个命令,写入了两次返回,发送需要等待上一次回调才发下一次的响应
|
|
public class AsyncSendBufferManager
|
|
{
|
|
private DynamicBufferManager _dynamicBufferManager;
|
|
public DynamicBufferManager DynamicBufferManager { get { return _dynamicBufferManager; } }
|
|
private List<SendBufferPacket> _sendBufferList;
|
|
private SendBufferPacket _sendBufferPacket;
|
|
|
|
public AsyncSendBufferManager(int bufferSize)
|
|
{
|
|
_dynamicBufferManager = new DynamicBufferManager(bufferSize);
|
|
_sendBufferList = new List<SendBufferPacket>();
|
|
_sendBufferPacket.Offset = 0;
|
|
_sendBufferPacket.Count = 0;
|
|
}
|
|
|
|
public void StartPacket()
|
|
{
|
|
_sendBufferPacket.Offset = _dynamicBufferManager.DataCount;
|
|
_sendBufferPacket.Count = 0;
|
|
}
|
|
|
|
public void EndPacket()
|
|
{
|
|
_sendBufferPacket.Count = _dynamicBufferManager.DataCount - _sendBufferPacket.Offset;
|
|
_sendBufferList.Add(_sendBufferPacket);
|
|
}
|
|
|
|
public bool GetFirstPacket(ref int offset, ref int count)
|
|
{
|
|
if (_sendBufferList.Count <= 0)
|
|
return false;
|
|
offset = 0;//_sendBufferList[0].Offset;清除了第一个包后,后续的包往前移,因此Offset都为0
|
|
count = _sendBufferList[0].Count;
|
|
return true;
|
|
}
|
|
|
|
public bool ClearFirstPacket()
|
|
{
|
|
if (_sendBufferList.Count <= 0)
|
|
return false;
|
|
int count = _sendBufferList[0].Count;
|
|
_dynamicBufferManager.Clear(count);
|
|
_sendBufferList.RemoveAt(0);
|
|
return true;
|
|
}
|
|
|
|
public void ClearPacket()
|
|
{
|
|
_sendBufferList.Clear();
|
|
_dynamicBufferManager.Clear(_dynamicBufferManager.DataCount);
|
|
}
|
|
}
|
|
}
|