laneya

multiplayer roguelike game
git clone https://git.ce9e.org/laneya.git

commit
72a7237458c705ee78039b20289ed7d48625e705
parent
8f5e90943f4adf0656b8f7aae1bcd55cd0027d28
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2018-08-03 12:12
Fix NetstringReceiver

Diffstat

M laneya/protocol.py 16 +++++++++-------

1 files changed, 9 insertions, 7 deletions


diff --git a/laneya/protocol.py b/laneya/protocol.py

@@ -131,7 +131,7 @@ class NetstringReceiver(asyncio.Protocol):
  131   131 
  132   132     """
  133   133     def __init__(self):
  134    -1         self.__buffer = ''
   -1   134         self.__buffer = b''
  135   135         self.transport = None
  136   136 
  137   137     def connection_made(self, transport):
@@ -144,20 +144,21 @@ class NetstringReceiver(asyncio.Protocol):
  144   144         # FIXME: invalid data should not crash the server
  145   145         self.__buffer += data
  146   146 
  147    -1         while ':' in self.__buffer:
  148    -1             length, remainder = self.__buffer.split(':', 1)
   -1   147         while b':' in self.__buffer:
   -1   148             length, remainder = self.__buffer.split(b':', 1)
  149   149             length = int(length)
  150   150 
  151   151             if len(remainder) > length:
  152    -1                 assert remainder[length] == ','
   -1   152                 assert remainder[length] == ord(b',')
  153   153                 s = remainder[:length]
  154    -1                 self.__buffer = self.__buffer[len('%i:%s,' % (length, s)):]
   -1   154                 self.__buffer = self.__buffer[len(b'%i:%s,' % (length, s)):]
  155   155                 self.string_received(s)
  156   156             else:
  157   157                 break
  158   158 
  159   159     def send_string(self, data):
  160    -1         self.transport.write('%i:%s,' % (len(data), data))
   -1   160         b = data.encode('utf8')
   -1   161         self.transport.write(b'%i:%s,' % (len(b), b))
  161   162 
  162   163 
  163   164 class JSONProtocol(NetstringReceiver):
@@ -167,7 +168,8 @@ class JSONProtocol(NetstringReceiver):
  167   168         raise NotImplementedError
  168   169 
  169   170     def string_received(self, s):
  170    -1         return self.json_received(json.loads(s))
   -1   171         data = json.loads(s.decode('utf8'))
   -1   172         return self.json_received(data)
  171   173 
  172   174     def send_json(self, data):
  173   175         return self.send_string(json.dumps(data))