1 /*
2  * MsgTrans - Message Transport Framework for DLang. Based on TCP, WebSocket, UDP transmission protocol.
3  *
4  * Copyright (C) 2019 HuntLabs
5  *
6  * Website: https://www.msgtrans.org
7  *
8  * Licensed under the Apache-2.0 License.
9  *
10  */
11 
12 module msgtrans.Packet;
13 
14 import msgtrans.MessageBuffer;
15 import msgtrans.PacketHeader;
16 import hunt.logging;
17 import std.bitmanip;
18 import core.stdc.string;
19 /**
20  *
21  */
22 class Packet
23 {
24     // static ubyte[] encode(uint messageId, ubyte[] data)
25     // {
26     //     auto header = new PacketHeader(messageId, cast(uint)data.length);
27 
28     //     return header.data() ~ data;
29     // }
30 
31     static ubyte[][] encode(MessageBuffer message) {
32         ubyte[] header = PacketHeader.encode(message);
33         if (message.hasExtend )
34         {
35             //ubyte[Extend.sizeof] extend ;
36             //memcpy(extend.ptr,&message.extend,Extend.sizeof);
37             if(message.data.length < 1024) {
38               return [header ~ message.extend.dup ~ message.data];
39             } else {
40               return [header , message.extend.dup, message.data];
41             }
42             //if(message.extendLength == uint.sizeof)
43             //{
44             //  ubyte[4] extend = nativeToBigEndian(message.tagId);
45             //  if(message.data.length < 1024) {
46             //    return [header ~ extend.dup ~ message.data];
47             //  } else {
48             //    return [header , extend.dup, message.data];
49             //  }
50             //}else
51             //{
52             //  ubyte[4] extend1 = nativeToBigEndian(message.tagId);
53             //  ubyte[4] extend2 = nativeToBigEndian(message.clientId);
54             //  if(message.data.length < 1024) {
55             //    return [header ~ extend1.dup ~ extend2.dup ~ message.data];
56             //  } else {
57             //    return [header , extend1.dup, extend2.dup,message.data];
58             //  }
59             //}
60 
61         }else
62         {
63           if(message.data.length < 1024) {
64             return [header ~ message.data];
65           } else {
66             return [header ,message.data];
67           }
68         }
69 
70     }
71 
72     // static MessageBuffer decode(ubyte[] data)
73     // {
74     //     if (data.length >= PACKET_HEADER_LENGTH)
75     //     {
76     //         PacketHeader header = PacketHeader.parse(data);
77 
78     //         if (data.length != (header.messageLength + PACKET_HEADER_LENGTH))
79     //         {
80     //             // packet error
81     //             logError("The message data is corrupted.");
82     //             return null;
83     //         }
84 
85     //         return new MessageBuffer(header.messageId(), data[PACKET_HEADER_LENGTH..$]);
86     //     } else
87     //         return null;
88     // }
89 }