import json
import stats
class NetworkReader:
def __init__(self,stream):
self._stream=stream
def readMsg(self):
data=self._stream.readline()
assert data
stats.logReceived(data)
jsonLength=int(data.split(b":")[1].strip()) # "json-length: length" -> length
data=self._stream.readline()
assert data
stats.logReceived(data)
binLength=int(data.split(b":")[1].strip()) # "bin-length: length" -> length
jsonData=self._stream.read(jsonLength)
assert len(jsonData)==jsonLength
stats.logReceived(jsonData)
jsonData=json.loads(str(jsonData,encoding="utf-8"))
binData=self._stream.read(binLength)
assert len(binData)==binLength
stats.logReceived(binData)
return (jsonData,binData)
class NetworkWriter:
def __init__(self,stream):
self._stream=stream
def writeMsg(self,*args):
msg=self.prepMsg(*args)
self._stream.write(msg)
self._stream.flush()
stats.logSent(msg)
def prepMsg(self,jsonData,binData=b""):
jsonData=bytes(json.dumps(jsonData,separators=(',',':'))+"\n",encoding="utf-8")
jsonLength=bytes("json-length: "+str(len(jsonData))+"\n",encoding="utf-8")
binLength=bytes("bin-length: "+str(len(binData))+"\n",encoding="utf-8")
return b"".join((jsonLength,binLength,jsonData,binData))