diff --git a/SiliconTorch/fxCyanF.py b/SiliconTorch/fxCyan.py similarity index 77% rename from SiliconTorch/fxCyanF.py rename to SiliconTorch/fxCyan.py index 4d7b1bdeed6ffde18f35757e3e7b2ea6f36e2ce6..dc9cd063252955080c490493d2fb89c52dff1459 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)