Files
@ 9dbe43245cff
Branch filter:
Location: Morevna/networkers.py - annotation
9dbe43245cff
1.7 KiB
text/x-python
fixed index bug on negotiating the last inner node
1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 1931061dd2e1 | import threading
import queue
import json
class NetworkReader(threading.Thread):
def __init__(self,stream):
threading.Thread.__init__(self,daemon=True)
self.parent=threading.current_thread()
self.stream=stream
self.output=queue.Queue()
def run(self):
while True:
if not self.parent.is_alive(): return
self.output.put(self.readMsg(),timeout=2)
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(threading.Thread):
def __init__(self,stream):
threading.Thread.__init__(self,daemon=True)
self.parent=threading.current_thread()
self.stream=stream
self.input=queue.Queue()
def run(self):
while True:
if not self.parent.is_alive(): return
msg=self.input.get(timeout=2)
if msg is None: return
self.stream.write(self.writeMsg(msg))
self.stream.flush()
def writeMsg(self,msg):
jsonData,binData=msg
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))
|