Files
@ 870c5c6c334f
Branch filter:
Location: Morevna/src/networkers.py - annotation
870c5c6c334f
1.3 KiB
text/x-python
reacquiring old locks
34f4027c1bd6 34f4027c1bd6 41ea9614ce8c 41ea9614ce8c 34f4027c1bd6 34f4027c1bd6 5c80ca07f00c 5c80ca07f00c 34f4027c1bd6 6a0ab4fe9f5e 5c80ca07f00c dad65188b1a0 6a0ab4fe9f5e 6a0ab4fe9f5e 41ea9614ce8c 5c80ca07f00c dad65188b1a0 6a0ab4fe9f5e 6a0ab4fe9f5e 41ea9614ce8c 6a0ab4fe9f5e 6a0ab4fe9f5e 6a0ab4fe9f5e 6a0ab4fe9f5e 41ea9614ce8c 6a0ab4fe9f5e 6a0ab4fe9f5e 6a0ab4fe9f5e 34f4027c1bd6 6a0ab4fe9f5e 34f4027c1bd6 34f4027c1bd6 34f4027c1bd6 5c80ca07f00c 5c80ca07f00c 34f4027c1bd6 6a0ab4fe9f5e 6a0ab4fe9f5e 026618d6681b 026618d6681b 6a0ab4fe9f5e 34f4027c1bd6 6a0ab4fe9f5e 6a0ab4fe9f5e 6a0ab4fe9f5e 6a0ab4fe9f5e dad65188b1a0 6a0ab4fe9f5e | import json
import stats
class NetworkReader:
def __init__(self, stream):
self._stream = stream
def read_msg(self):
data = self._stream.readline()
assert data
stats.log_received(data)
json_length = int(data.split(b":")[1].strip()) # "json-length: length" -> length
data = self._stream.readline()
assert data
stats.log_received(data)
bin_length = int(data.split(b":")[1].strip()) # "bin-length: length" -> length
json_data = self._stream.read(json_length)
assert len(json_data)==json_length
stats.log_received(json_data)
json_data = json.loads(str(json_data, encoding="utf-8"))
bin_data = self._stream.read(bin_length)
assert len(bin_data)==bin_length
stats.log_received(bin_data)
return (json_data, bin_data)
class NetworkWriter:
def __init__(self, stream):
self._stream = stream
def write_msg(self, *args):
msg = self.prep_msg(*args)
self._stream.write(msg)
self._stream.flush()
stats.log_sent(msg)
def prep_msg(self, json_data, bin_data=b""):
json_data = bytes(json.dumps(json_data, separators=(',', ':'))+"\n", encoding="utf-8")
json_length = bytes("json-length: "+str(len(json_data))+"\n", encoding="utf-8")
bin_length = bytes("bin-length: "+str(len(bin_data))+"\n", encoding="utf-8")
return b"".join((json_length, bin_length, json_data, bin_data))
|