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 ~ extend.dup ~ message.data]; 39 } else { 40 return [header , 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 }