summaryrefslogtreecommitdiff
path: root/common/msgstruct.py
diff options
context:
space:
mode:
Diffstat (limited to 'common/msgstruct.py')
-rw-r--r--common/msgstruct.py75
1 files changed, 75 insertions, 0 deletions
diff --git a/common/msgstruct.py b/common/msgstruct.py
new file mode 100644
index 0000000..26389f0
--- /dev/null
+++ b/common/msgstruct.py
@@ -0,0 +1,75 @@
+from struct import pack, unpack, calcsize
+
+try:
+ from localmsg import PORTS
+except ImportError:
+ PORTS = {}
+try:
+ from localmsg import HOSTNAME
+except ImportError:
+ from socket import gethostname
+ HOSTNAME = gethostname()
+
+
+MSG_WELCOME = "Welcome to gamesrv.py(3) !\n"
+MSG_BROADCAST_PORT= "*"
+MSG_DEF_PLAYFIELD = "p"
+MSG_DEF_KEY = "k"
+MSG_DEF_ICON = "r"
+MSG_DEF_BITMAP = "m"
+MSG_DEF_SAMPLE = "w"
+MSG_DEF_MUSIC = "z"
+MSG_PLAY_MUSIC = "Z"
+MSG_FADEOUT = "f"
+MSG_PLAYER_JOIN = "+"
+MSG_PLAYER_KILL = "-"
+MSG_PLAYER_ICON = "i"
+MSG_PING = "g"
+MSG_PONG = "G"
+MSG_INLINE_FRAME = "\\"
+MSG_PATCH_FILE = MSG_DEF_MUSIC
+MSG_ZPATCH_FILE = "P"
+MSG_MD5_FILE = "M"
+MSG_RECORDED = "\x00"
+
+CMSG_PROTO_VERSION= "v"
+CMSG_KEY = "k"
+CMSG_ADD_PLAYER = "+"
+CMSG_REMOVE_PLAYER= "-"
+CMSG_UDP_PORT = "<"
+CMSG_ENABLE_SOUND = "s"
+CMSG_ENABLE_MUSIC = "m"
+CMSG_PING = "g"
+CMSG_PONG = "G"
+CMSG_DATA_REQUEST = "M"
+CMSG_PLAYER_NAME = "n"
+
+BROADCAST_MESSAGE = "game!" # less than 6 bytes
+
+
+def message(tp, *values):
+ strtype = type('')
+ typecodes = ['']
+ for v in values:
+ if type(v) is strtype:
+ typecodes.append('%ds' % len(v))
+ elif 0 <= v < 256:
+ typecodes.append('B')
+ else:
+ typecodes.append('l')
+ typecodes = ''.join(typecodes)
+ assert len(typecodes) < 256
+ return pack(("!B%dsc" % len(typecodes)) + typecodes,
+ len(typecodes), typecodes, tp, *values)
+
+def decodemessage(data):
+ if data:
+ limit = ord(data[0]) + 1
+ if len(data) >= limit:
+ typecodes = "!c" + data[1:limit]
+ end = limit + calcsize(typecodes)
+ if len(data) >= end:
+ return unpack(typecodes, data[limit:end]), data[end:]
+ elif end > 1000000:
+ raise OverflowError
+ return None, data