基线 SVN r240
SVN-Revision: r240
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user