RawCircleBuff.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #pragma once
  2. #include <map>
  3. #include <vector>
  4. #include <string>
  5. #include <cstdint>
  6. #include <pthread.h>
  7. #include "MsgQueue.h"
  8. #include "CcosLock.h"
  9. #define LOW_REQUEST_SIZE (-1)
  10. class Packet_CB
  11. {
  12. public:
  13. Packet_CB()
  14. {
  15. m_Offset = 0;
  16. m_PacketSize = 0;
  17. };
  18. Packet_CB(uint32_t offset, uint32_t size)
  19. {
  20. m_PacketSize = size;
  21. m_Offset = offset;
  22. };
  23. ~Packet_CB() = default;
  24. uint32_t m_PacketSize;
  25. uint32_t m_Offset;
  26. };
  27. class CircleBuff : public CcosLock
  28. {
  29. protected:
  30. char* m_pBuff;
  31. uint32_t m_TotalSize;
  32. uint32_t m_UsedSize;
  33. uint32_t m_BasePos;
  34. uint32_t m_HeadPos;
  35. uint32_t m_Limit;
  36. MsgQueue<Packet_CB> m_PacketQue;
  37. pthread_mutex_t m_Mutex;
  38. uint32_t PushBlock(const char* pContext, uint32_t Size);
  39. public:
  40. CircleBuff();
  41. virtual ~CircleBuff();
  42. bool ReSetBuffSize(uint32_t Size);
  43. void SetBuffMaxLimit(uint32_t limit);
  44. uint32_t Push(const char* pContext, uint32_t Size);
  45. int Pop(char* pContext, uint32_t ContextSize);
  46. uint32_t GetPacketCount();
  47. uint32_t GetFrontPacketSize();
  48. void Lock();
  49. void Unlock();
  50. };