Files
Hippolyzer/pyogp/lib/base/message/data_packer.py
2008-07-29 15:10:59 +00:00

61 lines
2.1 KiB
Python

import struct
from pyogp.lib.base.message.message_types import MsgType
class DataPacker(object):
def __init__(self):
self.packer = {}
self.packer[MsgType.MVT_VARIABLE] = self.__pack_string
self.packer[MsgType.MVT_U8] = '>B'
self.packer[MsgType.MVT_U16] = '>H'
self.packer[MsgType.MVT_U32] = '>I'
self.packer[MsgType.MVT_U64] = '>Q'
self.packer[MsgType.MVT_S8] = '>b'
self.packer[MsgType.MVT_S16] = '>h'
self.packer[MsgType.MVT_S32] = '>i'
self.packer[MsgType.MVT_S64] = '>q'
self.packer[MsgType.MVT_F32] = '>f'
self.packer[MsgType.MVT_F64] = '>d'
self.packer[MsgType.MVT_LLVector3] = self.__pack_vector3
self.packer[MsgType.MVT_LLVector3d] = self.__pack_vector3d
self.packer[MsgType.MVT_LLVector4] = self.__pack_vector4
self.packer[MsgType.MVT_LLQuaternion] = self.__pack_quat
self.packer[MsgType.MVT_LLUUID] = self.__pack_uuid
self.packer[MsgType.MVT_BOOL] = '>B'
self.packer[MsgType.MVT_IP_ADDR] = self.__pack_string
self.packer[MsgType.MVT_IP_PORT] = '>H'
def pack_data(self, data, data_type):
if data_type in self.packer:
pack = self.packer[data_type]
if callable(pack):
return pack(data)
else:
return struct.pack(pack, data)
return None
def __pack_tuple(self, tup, tp):
size = len(tup)
return struct.pack('>' + str(size) + tp, *tup)
def __pack_vector3(self, vec):
return __pack_tuple(vec, 'f')
def __pack_vector3d(self, vec):
return __pack_tuple(vec, 'd')
def __pack_vector4(self, vec):
return __pack_tuple(vec, 'f')
def __pack_quat(self, quat):
#first, pack to vector3
vec = quat_to_vec3(quat)
return __pack_vector3(vec)
def __pack_uuid(self, uuid):
return uuid.bytes
def __pack_string(self, pack_string):
return pack_string