Files @ b0515ceb502d
Branch filter:

Location: Morevna/src/networkers.py

Laman
actually flushing the files
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))