summaryrefslogtreecommitdiff
path: root/common/gamesrv.py
diff options
context:
space:
mode:
Diffstat (limited to 'common/gamesrv.py')
-rw-r--r--common/gamesrv.py36
1 files changed, 27 insertions, 9 deletions
diff --git a/common/gamesrv.py b/common/gamesrv.py
index eaa9a87..44a3e9c 100644
--- a/common/gamesrv.py
+++ b/common/gamesrv.py
@@ -59,19 +59,28 @@ class DataChunk:
def read(self, slice=None):
f = open(self.filename, "rb")
data = f.read()
+ print(f"read: data={type(data)}",file=sys.stderr)
f.close()
if slice:
start, length = slice
data = data[start:start+length]
+ print(f"read: data={type(data)}",file=sys.stderr)
return data
def defall(self, client):
if client.proto == 1 or not self.filename:
# protocol 1
- try:
+ if hasattr(self,'msgdef'):
msgdef = self.msgdef
- except AttributeError:
- data = zlib.compress(self.read())
+ else:
+ print(f"self={type(self)}", file=sys.stderr)
+ data = self.read()
+ if type(data)==type(''):
+ raise Exception('data should be bytes, not str')
+# data=data.encode()
+ print(f"defall: data={type(data)}", file=sys.stderr)
+ print(f"defall: data={data}", file=sys.stderr)
+ data = zlib.compress(data)
msgdef = self.msgdef = self.getmsgdef(data)
else:
# protocol >= 2
@@ -130,6 +139,8 @@ class Bitmap(DataChunk):
class MemoryBitmap(Bitmap):
def __init__(self, code, data, colorkey=None):
+ if type(data)==type(''):
+ raise Exception('data should be bytes, not str')
self.data = data
Bitmap.__init__(self, code, None, colorkey)
@@ -477,13 +488,16 @@ class Client:
del self.sounds[key]
if broadcast_extras is None or self not in broadcast_clients:
if self.dyncompress is not None:
- # DEBUG: print(f"self.dyncompress={self.dyncompress}", file=sys.stderr)
+ # DEBUG:
+ print(f"(before) self.dyncompress={self.dyncompress}", file=sys.stderr)
udpdatas = self.dynamic_compress(udpdata)
- # DEBUG: print(f"udpdata={udpdata}",file=sys.stderr)
+ # DEBUG:
+ print(f"(after) udpdata={udpdata} udpdatas={udpdatas}",file=sys.stderr)
else:
udpdatas = [udpdata]
- # DEBUG: print(f"udpdatas={udpdatas}",file=sys.stderr)
- for udpdata in udpdatas or []:
+ # DEBUG:
+ print(f"udpdatas={udpdatas}",file=sys.stderr)
+ for udpdata in udpdatas: # or []:
try:
self.udpsockcounter += self.udpsocket.send(udpdata)
except error as e:
@@ -547,16 +561,17 @@ class Client:
yield None, None
frame = (frame + 1) & 0xFF
- self.dyncompress = dyncompress()
+ self.dyncompress = None # dyncompress() disable compression TODO
def dynamic_compress(self, framedata):
result = []
+ print(f"head={head} co={co}", file=sys.stderr)
for head, co in self.dyncompress:
if not co:
return result
data = [head, co.compress(framedata), co.flush(zlib.Z_SYNC_FLUSH)]
if head:
- result.append(''.join(data))
+ result.append(b''.join(data))
def send_can_mix(self):
return not self.msgl and self.socket is not None
@@ -825,6 +840,7 @@ class SimpleClient(Client):
def finishinit(self, game):
num = 0
for keyname, icolist, fn in game.FnKeys:
+ print(f"finishinit: fn={fn} keyname={keyname} icolist={icolist}", file=sys.stderr)
self.msgl.append(message(MSG_DEF_KEY, keyname.encode(), num,
*[ico.code for ico in icolist]))
num += 1
@@ -834,9 +850,11 @@ class SimpleClient(Client):
try:
player = self.players[pid]
fn = game.FnKeys[keynum][2]
+ print(f"cmsg_key: fn={fn} keynum={keynum}", file=sys.stderr)
except (KeyError, IndexError):
game.FnUnknown()
else:
+ print(f"cmsg_key: player={player}", file=sys.stderr)
getattr(player, fn) ()
MESSAGES = Client.MESSAGES.copy()