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 }