commit e0a26c8d761c5e7a55f6aa1a519d2f164408809f Author: Jens Ahrensfeld Date: Sun Mar 8 12:22:40 2026 +0100 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f11b75 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ diff --git a/multi_client.py b/multi_client.py new file mode 100644 index 0000000..0e69f42 --- /dev/null +++ b/multi_client.py @@ -0,0 +1,73 @@ +import socket +import selectors +from copy import deepcopy +import time + + +class MultiClient(object): + def __init__(self, servers: list[dict]): + self.servers = servers + self.sock_list = deepcopy(self.servers) + self.sel = None + + for server in self.sock_list: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.setblocking(False) + server['sock'] = sock + + def connect(self): + self.sel = selectors.DefaultSelector() + events = selectors.EVENT_READ + for sock in self.sock_list: + print(f"Starting connection {sock['name']} to {sock['host']}:{sock['port']}") + self.sel.register(sock['sock'], events, data=None) + sock['sock'].connect_ex((sock['host'], sock['port'])) + + def disconnect(self): + for sock in self.sock_list: + sock['sock'].close() + + def on_receive(self, key): + data = key.fileobj.recv(1024) + print(f"{self}: on_receive: {data}") + + def on_send(self, key): + return None + + def send_request(self): + events = selectors.EVENT_READ | selectors.EVENT_WRITE + for sock in self.sock_list: + self.sel.register(sock['sock'], events, data=kakac) + print("receive") + + def event_loop(self): + try: + while True: + events = self.sel.select(timeout=1) + for key, mask in events: + if mask & selectors.EVENT_READ: + self.on_receive(key) + if mask & selectors.EVENT_WRITE: + data = self.on_send(key) + if data is None: + events = selectors.EVENT_READ + for sock in self.sock_list: + self.sel.register(sock['sock'], events, data=None) + + except KeyboardInterrupt: + print("Caught keyboard interrupt, exiting") + finally: + self.sel.close() + + +if __name__ == "__main__": + server_list = [ + {'name': "neo-f9p", 'host': "192.168.22.93", 'port': 8721}, + {'name': "zed-x20p", 'host': "192.168.22.93", 'port': 8731} + ] + + mc = MultiClient(server_list) + mc.connect() + mc.event_loop() + time.sleep(1) + mc.disconnect() diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..e69de29