about summary refs log tree commit diff
path: root/src/engine/msg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/msg.cpp')
-rw-r--r--src/engine/msg.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/engine/msg.cpp b/src/engine/msg.cpp
new file mode 100644
index 00000000..024bab2c
--- /dev/null
+++ b/src/engine/msg.cpp
@@ -0,0 +1,43 @@
+
+#include "interface.h"
+#include "packet.h"
+
+// message packing
+static data_packer packer;
+static msg_info pack_info;
+
+void msg_pack_int(int i) { packer.add_int(i); }
+void msg_pack_string(const char *p, int limit) { packer.add_string(p, limit); }
+void msg_pack_raw(const void *data, int size) { packer.add_raw((const unsigned char *)data, size); }
+
+void msg_pack_start(int msg, int flags)
+{
+	packer.reset();
+	pack_info.msg = msg;
+	pack_info.flags = flags;
+	
+	msg_pack_int(msg);
+}
+
+void msg_pack_end()
+{
+	pack_info.size = packer.size();
+	pack_info.data = packer.data();
+}
+
+const msg_info *msg_get_info()
+{
+	return &pack_info;
+}
+
+// message unpacking
+static data_unpacker unpacker;
+int msg_unpack_start(const void *data, int data_size)
+{
+	unpacker.reset((const unsigned char *)data, data_size);
+	return msg_unpack_int();
+}
+
+int msg_unpack_int() { return unpacker.get_int(); }
+const char *msg_unpack_string() { return unpacker.get_string(); }
+const unsigned char *msg_unpack_raw(int size)  { return unpacker.get_raw(size); }