From 409dcde0fe35d47c86153a3e2d3da3a2606a9955 Mon Sep 17 00:00:00 2001 From: Jochen Vothknecht <jochen3120@gmail.com> Date: Thu, 16 Dec 2021 08:25:40 +0100 Subject: [PATCH] =?UTF-8?q?Polishing=20low-level=20protocol=20module;=20de?= =?UTF-8?q?bugging=20and=20bugixing=20it.=20Works=20fine=20now=20?= =?UTF-8?q?=F0=9F=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SiliconTorch/{fxCyanF.py => fxCyan.py} | 34 +++++++++++++++++--------- 1 file changed, 23 insertions(+), 11 deletions(-) rename SiliconTorch/{fxCyanF.py => fxCyan.py} (77%) diff --git a/SiliconTorch/fxCyanF.py b/SiliconTorch/fxCyan.py similarity index 77% rename from SiliconTorch/fxCyanF.py rename to SiliconTorch/fxCyan.py index 4d7b1bd..dc9cd06 100644 --- a/SiliconTorch/fxCyanF.py +++ b/SiliconTorch/fxCyan.py @@ -7,9 +7,11 @@ from inspect import signature from socket import socket, AF_INET, SOCK_DGRAM -class DEFAULT: +class fxCyanDefaults: port = 4213 - header = b'fxCyanF' + + @staticmethod + def header(suffix: str): return bytes(f'fxCyan{suffix}', 'ASCII') listenAddr = '0.0.0.0' @@ -18,7 +20,7 @@ class Sender: _socket = socket(AF_INET, SOCK_DGRAM) - def __init__(self, host: str, port: int = DEFAULT.port): + def __init__(self, host: str = 'localhost', port: int = fxCyanDefaults.port): self._host = host self._port = port @@ -37,7 +39,7 @@ class Sender: return struct.pack('f' * len(channels), *channels) @classmethod - def _sendUDP(cls, data: bytearray, host: str, port: int = DEFAULT.port): + def _sendUDP(cls, data: bytearray, host: str, port: int = fxCyanDefaults.port): try: cls._socket.sendto(data, (host, port)) except: @@ -45,8 +47,8 @@ class Sender: pass @classmethod - def sendTo(cls, channels: list, host: str, port: int = DEFAULT.port): - data = DEFAULT.header + def sendTo(cls, channels: list, host: str, port: int = fxCyanDefaults.port): + data = fxCyanDefaults.header('F') data += Sender._convertData(channels) cls._sendUDP(data, host, port) @@ -57,7 +59,7 @@ class Sender: class Receiver: - def __init__(self, host: str = DEFAULT.listenAddr, port: int = DEFAULT.port): + def __init__(self, host: str = fxCyanDefaults.listenAddr, port: int = fxCyanDefaults.port): self._socket = socket(AF_INET, SOCK_DGRAM) self._socket.bind((host, port)) @@ -81,7 +83,7 @@ class Receiver: params = len(signature(callback).parameters) - if params < 1 or params: + if params < 1: raise AttributeError(f'callback must take at least param#[ 1 ], takes param#[ {params} ]') else: self._callbacks[callback] = params @@ -102,7 +104,7 @@ class Receiver: def _recvLoop(self): - header = DEFAULT.header + header = fxCyanDefaults.header('F') headerLen = len(header) while True: @@ -117,7 +119,8 @@ class Receiver: # TODO: logging…? continue - _chs = struct.unpack('f' * len(data), data) + chCnt = int(len(data) / 4) + _chs = struct.unpack('f' * chCnt, data) channels = [] for ch in _chs: @@ -129,9 +132,18 @@ class Receiver: try: if params == 1: callback(channels) - elif params == 2: + elif params >= 2: callback(channels, addr) except: # TODO: logging…? pass + + +tx = Sender() +rx = Receiver() + +def _rcv(ch, addr, something=None): + print(f'Got ch#[ {len(ch)} ] from host[ {addr} ] with data[ {ch} ]') + +rx.addCallback(_rcv) -- GitLab