s-net-Tools
Frame.h
Go to the documentation of this file.
1 
37 #ifndef FRAME_H
38 #define FRAME_H
39 
40 #include <stddef.h>
41 #include <vector>
42 #include <assert.h>
43 
44 class Frame {
45 public:
46  // CTOR and DTOR
48  virtual ~Frame(){}
49 
50  // Serializer and deserializer
51  virtual const std::vector<unsigned char> Serialize() const = 0;
52  size_t BytesNeeded() const { return m_BytesRemaining; }
53 
54  // true: no error, false: parser error
55  bool ParseBytes(const unsigned char *a_ReadBuffer, size_t &a_ReadBufferOffset, size_t &a_BytesAvailable) {
56  // Checks
57  assert(a_ReadBuffer);
58  assert(a_BytesAvailable);
59  assert(m_BytesRemaining);
60 
61  // Parse the frame
62  bool l_bSuccess = true;
63  while ((m_BytesRemaining) && (a_BytesAvailable)) {
64  // Determine the amount of bytes to consume
65  size_t l_BytesToCopy = m_BytesRemaining;
66  if (a_BytesAvailable < l_BytesToCopy) {
67  l_BytesToCopy = a_BytesAvailable;
68  } // if
69 
70  // Consume bytes from the provided buffer
71  m_Buffer.insert(m_Buffer.end(), &a_ReadBuffer[a_ReadBufferOffset], (&a_ReadBuffer[a_ReadBufferOffset] + l_BytesToCopy));
72  a_ReadBufferOffset += l_BytesToCopy;
73  a_BytesAvailable -= l_BytesToCopy;
74  m_BytesRemaining -= l_BytesToCopy;
75  if (m_BytesRemaining == 0) {
76  // A subsequent chunk of data is ready
77  if (Deserialize() == false) {
78  // Failed to parse the received bytes
79  l_bSuccess = false;
80  break;
81  } // else
82  } // if
83  } // while
84 
85  return l_bSuccess;
86  }
87 
88 protected:
89  // Internal helpers
90  virtual bool Deserialize() = 0;
91 
92  // Members
93  std::vector<unsigned char> m_Buffer;
95 };
96 
97 #endif // FRAME_H
virtual bool Deserialize()=0
virtual ~Frame()
Definition: Frame.h:48
bool ParseBytes(const unsigned char *a_ReadBuffer, size_t &a_ReadBufferOffset, size_t &a_BytesAvailable)
Definition: Frame.h:55
size_t BytesNeeded() const
Definition: Frame.h:52
Frame()
Definition: Frame.h:47
std::vector< unsigned char > m_Buffer
Definition: Frame.h:93
virtual const std::vector< unsigned char > Serialize() const =0
size_t m_BytesRemaining
Definition: Frame.h:94
Definition: Frame.h:44