Files
@ fa1be84731e2
Branch filter:
Location: Morevna/src/networkers.py - annotation
fa1be84731e2
1.1 KiB
text/x-python
simplified networkers for dealing with a single request-response
fa1be84731e2 59339cfb3d80 59339cfb3d80 fa1be84731e2 4e5f76c966dc 4e5f76c966dc fa1be84731e2 4e5f76c966dc 4e5f76c966dc 4e5f76c966dc 4e5f76c966dc 4e5f76c966dc 4e5f76c966dc 4e5f76c966dc 4e5f76c966dc 4e5f76c966dc 4e5f76c966dc 4e5f76c966dc 4e5f76c966dc 4e5f76c966dc 59339cfb3d80 fa1be84731e2 4e5f76c966dc 4e5f76c966dc fa1be84731e2 fa1be84731e2 fa1be84731e2 1c3d9df86fb1 fa1be84731e2 fa1be84731e2 4e5f76c966dc 4e5f76c966dc 4e5f76c966dc 4e5f76c966dc | import json
class NetworkReader:
def __init__(self,stream):
self.stream=stream
def readMsg(self):
data=self.stream.readline()
if not data: pass # !! raise something
jsonLength=int(data.split(b":")[1].strip()) # "json-length: length" -> length
data=self.stream.readline()
if not data: pass # !! raise something
binLength=int(data.split(b":")[1].strip()) # "bin-length: length" -> length
jsonData=self.stream.read(jsonLength)
jsonData=json.loads(str(jsonData,encoding="utf-8"))
binData=self.stream.read(binLength)
return (jsonData,binData)
class NetworkWriter:
def __init__(self,stream):
self.stream=stream
def writeMsg(self,*args):
self.stream.write(self.prepMsg(*args))
self.stream.flush()
def prepMsg(self,jsonData,binData=b""):
jsonData=bytes(json.dumps(jsonData)+"\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))
|