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