1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
enum Type_Message
{
CONTROL_MESSAGE = 0,
DATA_MESSAGE
};
// used to describe messages
class WR_Message
{
public:
WR_Message() : typeMsg(DATA_MESSAGE), nbPacket(0), TU(500) {};
Type_Message typeMsg;
size_t nbPacket;
size_t TU; // size Transmission Unit
};
enum Type_Packet
{
SINGLE_PACKET = 0,
PART_PACKET
};
// packet header
class WR_Header
{
public:
WR_Header() : IDPacket(0), typePacket(SINGLE_PACKET), numPacket(0), lastPacket(true) {};
long IDPacket;
Type_Packet typePacket;
size_t numPacket;
bool lastPacket;
};
// packet with fixed TU (Transmission Unit)
template <class HEADER, size_t TU>
class WR_Packet
{
public:
WR_Packet() : DU(0) {
memset (data,' ',TU);
};
HEADER header;
size_t DU; //Data Unit (part of the Transmission Unit that is used)
char data[TU];
};
template <class HEADER,size_t TU>
class WR_Encoder
{
public:
virtual void encodeMESSAGE (char*& msg, size_t& size, WR_Message& message, list<WR_Packet<HEADER,TU>>& packets) {
char* ptr = msg;
//write message
writeInt((int)message.typeMsg,ptr);
writeULong(message.nbPacket,ptr);
(...) |
Partager