1 module tristanable.encoding; 2 3 public final class DataMessage 4 { 5 6 private ulong tag; 7 private byte[] data; 8 9 public static DataMessage decode(byte[] bytes) 10 { 11 /* Fetch the `tag` */ 12 ulong receivedTag = *(cast(ulong*)bytes.ptr); 13 14 /* Fetch the `data` */ 15 byte[] receivedData = bytes[8..bytes.length]; 16 17 return new DataMessage(receivedTag, receivedData); 18 } 19 20 /** 21 * Constructs a new DataMessage with 22 * the give `tag` and bytes `data` 23 */ 24 this(ulong tag, byte[] data) 25 { 26 this.tag = tag; 27 this.data = data; 28 } 29 30 public byte[] encode() 31 { 32 /* Construct the message array */ 33 byte[] messageData; 34 35 /* Add the `tag` bytes */ 36 messageData ~= *(cast(byte*)&tag); 37 messageData ~= *(cast(byte*)&tag+1); 38 messageData ~= *(cast(byte*)&tag+2); 39 messageData ~= *(cast(byte*)&tag+3); 40 messageData ~= *(cast(byte*)&tag+4); 41 messageData ~= *(cast(byte*)&tag+5); 42 messageData ~= *(cast(byte*)&tag+6); 43 messageData ~= *(cast(byte*)&tag+7); 44 45 /* Add the `data` bytes (the actual message) */ 46 messageData ~= data; 47 48 return messageData; 49 } 50 51 public byte[] getData() 52 { 53 return data; 54 } 55 56 public ulong getTag() 57 { 58 return tag; 59 } 60 } 61 62 public static byte[] encodeForSend(DataMessage message) 63 { 64 import bmessage; 65 66 return encodeBformat(message.encode()); 67 }