Added routing to header

This commit is contained in:
PhilipTrauner 2016-01-04 03:52:04 +01:00
parent 08bcbce2d6
commit 0d7cac4c93

View file

@ -18,13 +18,14 @@ class ESock:
def recv(self): def recv(self):
raw_metadata = self._sock.recv(8) raw_metadata = self._sock.recv(24)
if raw_metadata == b"": if raw_metadata == b"":
self._sock.close() self._sock.close()
raise socket.error("Connection closed") raise socket.error("Connection closed")
metadata = struct.unpack("cI", raw_metadata) metadata = struct.unpack("cI16s", raw_metadata)
data_type = metadata[0] data_type = metadata[0]
data_length = metadata[1] data_length = metadata[1]
route = metadata[2].rstrip(b"\x00").decode()
data = b'' data = b''
bufsize = 4096 bufsize = 4096
while len(data) < data_length: while len(data) < data_length:
@ -39,20 +40,21 @@ class ESock:
data = data.decode() data = data.decode()
elif data_type == DataTypes.json: elif data_type == DataTypes.json:
data = json.loads(data.decode()) data = json.loads(data.decode())
return data return data, route
def send(self, data): def send(self, data, route=""):
data_type = type(data) data_type = type(data)
route = route.encode()
if data_type is str: if data_type is str:
data = data.encode() data = data.encode()
self.sendall(struct.pack("cI", DataTypes.str, len(data)) + data) self.sendall(struct.pack("cI16s", DataTypes.str, len(data), route) + data)
elif data_type is dict or data_type is list: elif data_type is dict or data_type is list:
data = json.dumps(data).encode() data = json.dumps(data).encode()
self.sendall(struct.pack("cI", DataTypes.json, len(data)) + data) self.sendall(struct.pack("cI16s", DataTypes.json, len(data), route) + data)
elif data_type is bytes: elif data_type is bytes:
self.sendall(struct.pack("cI", DataTypes.bin, len(data)) + data) self.sendall(struct.pack("cI16s", DataTypes.bin, len(data), route) + data)
else: else:
self.sendall(struct.pack("cI", DataTypes.other, len(data)) + data) self.sendall(struct.pack("cI16s", DataTypes.other, len(data), route) + data)
def __eq__(self, other): def __eq__(self, other):