diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-08-22 07:52:33 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2007-08-22 07:52:33 +0000 |
| commit | 8b3c16e6152a527f9aec1a88a9eed74119de7000 (patch) | |
| tree | f0bde5cea15e696e42cade06a3b12ff6b13acc57 /src/engine/msg.c | |
| parent | 9899666a7ce6679a3b9667ab09f615f4d0769c16 (diff) | |
| download | zcatch-8b3c16e6152a527f9aec1a88a9eed74119de7000.tar.gz zcatch-8b3c16e6152a527f9aec1a88a9eed74119de7000.zip | |
major engine cleanup. dependency on baselib removed. engine is now C code (not ansi tho). some other cruft removed aswell
Diffstat (limited to 'src/engine/msg.c')
| -rw-r--r-- | src/engine/msg.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/engine/msg.c b/src/engine/msg.c new file mode 100644 index 00000000..d53c9008 --- /dev/null +++ b/src/engine/msg.c @@ -0,0 +1,53 @@ +#include "interface.h" +#include "packer.h" + +/* message packing */ +static PACKER msg_packer; +static MSG_INFO pack_info; + +void msg_pack_int(int i) { packer_add_int(&msg_packer, i); } +void msg_pack_string(const char *p, int limit) { packer_add_string(&msg_packer, p, limit); } +void msg_pack_raw(const void *data, int size) { packer_add_raw(&msg_packer, (const unsigned char *)data, size); } + +void msg_pack_start_system(int msg, int flags) +{ + packer_reset(&msg_packer); + pack_info.msg = (msg<<1)|1; + pack_info.flags = flags; + + msg_pack_int(pack_info.msg); +} + +void msg_pack_start(int msg, int flags) +{ + packer_reset(&msg_packer); + pack_info.msg = msg<<1; + pack_info.flags = flags; + + msg_pack_int(pack_info.msg); +} + +void msg_pack_end() +{ + pack_info.size = packer_size(&msg_packer); + pack_info.data = packer_data(&msg_packer); +} + +const MSG_INFO *msg_get_info() +{ + return &pack_info; +} + +/* message unpacking */ +static UNPACKER msg_unpacker; +int msg_unpack_start(const void *data, int data_size, int *system) +{ + unpacker_reset(&msg_unpacker, (const unsigned char *)data, data_size); + int msg = msg_unpack_int(); + *system = msg&1; + return msg>>1; +} + +int msg_unpack_int() { return unpacker_get_int(&msg_unpacker); } +const char *msg_unpack_string() { return unpacker_get_string(&msg_unpacker); } +const unsigned char *msg_unpack_raw(int size) { return unpacker_get_raw(&msg_unpacker, size); } |