| 12
 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