12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #pragma once
- #include <map>
- #include <vector>
- #include <string>
- #include "MsgQueue.h"
- #include "DiosLock.h"
- using namespace std;
- #define LOW_REQUEST_SIZE (-1)
- class Packet_CB
- {
- public:
- Packet_CB()
- {
- m_Offset = 0;
- m_PacketSize = 0;
- };
- Packet_CB(DWORD offset,DWORD size)
- {
- m_PacketSize = size;
- m_Offset = offset;
- };
- ~Packet_CB()
- {
- };
- DWORD m_PacketSize;
- DWORD m_Offset;
- };
- class CircleBuff : public DiosLock
- {
- protected:
- char *m_pBuff;
- DWORD m_TotalSize;
- DWORD m_UsedSize;
- DWORD m_BasePos;
- DWORD m_HeadPos;
- DWORD m_Limit;
- MsgQueue<Packet_CB> m_PacketQue;
- DWORD PushBlock(const char *pContext, DWORD Size);
- public:
- CircleBuff();
- virtual ~CircleBuff();
- //初期设置,后续Push中有自动调整
- bool ReSetBuffSize(DWORD Size);
- //可能需要设置BUFF最大Limit,不然有可能内存吃冒了.
- void SetBuffMaxLimit(DWORD limit);//缺省32M在构造中
- //压入一个包,RAW+Size
- //返回压入包的大小,返回0:要么是Size零,要么是没内存了.
- DWORD Push(const char *pContext, DWORD Size);
- //读一个包,RAW+Size
- //返回包的大小,返回0意味着无包,返回-1意味着读包缓存太小
- int Pop(char *pContext, DWORD ContextSize);
- DWORD GetPacketCount();//读取剩余包的个数
- DWORD GetFrontPacketSize();//读取要Pop的包大小,返回0:无包
- //int CopyTransfer(CircleBuff &org);//copy org -> this.返回复制个数,负数返回失败
- HANDLE GetNotifyHandle();
- };
|