Libftpp
A modern C++ library
message.cpp
Go to the documentation of this file.
1 #include "message.hpp"
2 
3 Message::Message(Message::Type type) : _type(type) {}
4 
5 void Message::appendBytes(const unsigned char* data, size_t len)
6 {
7  _buffer.append(data, len);
8 }
9 
11 {
12  if (_buffer.size() < sizeof(Message::Type) + sizeof(size_t))
13  return false;
14 
16  _buffer >> type;
17 
18  size_t messageSize;
19  _buffer >> messageSize;
20 
21  _buffer.decreaseCursor(sizeof(Message::Type) + sizeof(size_t));
22 
23  return (_buffer.size() >= sizeof(Message::Type) + sizeof(size_t) + messageSize);
24 }
25 
26 std::vector<unsigned char> Message::getSerializedData() const
27 {
28  std::vector<unsigned char> result;
29  size_t totalSize = sizeof(Message::Type) + sizeof(size_t) + _buffer.size();
30  result.reserve(totalSize);
31 
32  result.insert(result.end(),
33  reinterpret_cast<const unsigned char*>(&_type),
34  reinterpret_cast<const unsigned char*>(&_type) + sizeof(Message::Type));
35 
36  size_t bufferSize = _buffer.size();
37  result.insert(result.end(),
38  reinterpret_cast<const unsigned char*>(&bufferSize),
39  reinterpret_cast<const unsigned char*>(&bufferSize) + sizeof(size_t));
40 
41  // Mettre les données
42  auto bufData = _buffer.data(); // récupérer une seule fois le vector tempora
43  result.insert(result.end(), bufData.begin(), bufData.end());
44 
45  return result;
46 }
47 
49 {
50  _buffer.reset();
51 }
52 
54 {
55  return _type;
56 }
57 
59 {
60  _type = type;
61  return;
62 }
63 
65 {
66  _fd = fd;
67 }
68 
69 void Message::incr_cursor(size_t len) const
70 {
71  _buffer.increaseCursor(len);
72 }
73 
74 void Message::decr_cursor(size_t len) const
75 {
76  _buffer.decreaseCursor(len);
77 }
78 
79 const int& Message::getFd() const
80 {
81  return _fd;
82 }
83 
85 {
86  return &_buffer;
87 }
A simple LIFO data buffer for serialization and deserialization for simple data types and std::string...
Definition: data_buffer.hpp:37
size_t size() const
Definition: data_buffer.cpp:52
void reset() const
Reset the read/write cursor to the beginning of the buffer.
Definition: data_buffer.cpp:8
void increaseCursor(size_t amount) const
Increase the read/write cursor by a specified amount.
Definition: data_buffer.cpp:67
const std::vector< unsigned char > data() const
Definition: data_buffer.cpp:57
void decreaseCursor(size_t amount) const
Decrease the read/write cursor by a specified amount.
Definition: data_buffer.cpp:80
void append(const unsigned char *data, size_t len)
Definition: data_buffer.cpp:22
void setType(Message::Type type)
Definition: message.cpp:58
Message()
Definition: message.hpp:59
void reset()
Definition: message.cpp:48
std::vector< unsigned char > getSerializedData() const
Definition: message.cpp:26
void decr_cursor(size_t len) const
Definition: message.cpp:74
void setMessageFd(int fd)
Definition: message.cpp:64
bool isComplet()
Definition: message.cpp:10
Message::Type type() const
Definition: message.cpp:53
void appendBytes(const unsigned char *data, size_t len)
Definition: message.cpp:5
void incr_cursor(size_t len) const
Definition: message.cpp:69
const int & getFd() const
Definition: message.cpp:79
int Type
Definition: message.hpp:49
DataBuffer * getBuffer()
Definition: message.cpp:84