Skip to content
Snippets Groups Projects
Commit 409dcde0 authored by fxk8y's avatar fxk8y :spider:
Browse files

Polishing low-level protocol module; debugging and bugixing it. Works fine now :sunglasses:

parent 2df6936e
No related branches found
No related tags found
No related merge requests found
......@@ -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)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment