mirror of
https://github.com/abakh/nbsdgames
synced 2025-04-28 14:09:32 -04:00
76 lines
1.9 KiB
Python
76 lines
1.9 KiB
Python
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
|