From 7d87bc8f3445b79a355c0d3af14921861068cb48 Mon Sep 17 00:00:00 2001 From: jens Date: Tue, 24 Nov 2020 20:42:27 +0100 Subject: [PATCH] - refactored --- res/beer.png | Bin 0 -> 4967 bytes res/beer.xcf | Bin 0 -> 131436 bytes res/dose.png | Bin 0 -> 3750 bytes res/fass.png | Bin 0 -> 7006 bytes res/flasche.png | Bin 0 -> 4145 bytes res/glass.png | Bin 0 -> 4063 bytes res/glass2.png | Bin 0 -> 11976 bytes res/glass_flasche.png | Bin 0 -> 7424 bytes res/krug.png | Bin 0 -> 6132 bytes res/krug2.png | Bin 0 -> 11976 bytes ws/client/ws_client.py | 132 ++++++++++++++++ ws/connection.py | 19 +++ ws/message.py | 77 +++++++++ ws/server/ws_server.py | 39 +++++ ws/server/ws_server_multi_user.py | 67 ++++++++ ws/user.py | 132 ++++++++++++++++ ws_client_gui.py | 251 ++++++++++++++++++++++++++++++ 17 files changed, 717 insertions(+) create mode 100644 res/beer.png create mode 100644 res/beer.xcf create mode 100644 res/dose.png create mode 100644 res/fass.png create mode 100644 res/flasche.png create mode 100644 res/glass.png create mode 100644 res/glass2.png create mode 100644 res/glass_flasche.png create mode 100644 res/krug.png create mode 100644 res/krug2.png create mode 100644 ws/client/ws_client.py create mode 100644 ws/connection.py create mode 100644 ws/message.py create mode 100644 ws/server/ws_server.py create mode 100644 ws/server/ws_server_multi_user.py create mode 100644 ws/user.py create mode 100644 ws_client_gui.py diff --git a/res/beer.png b/res/beer.png new file mode 100644 index 0000000000000000000000000000000000000000..fc94e7b36b691c266c9d6be651259212ba85adbb GIT binary patch literal 4967 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 literal 0 HcmV?d00001 diff --git a/res/beer.xcf b/res/beer.xcf new file mode 100644 index 0000000000000000000000000000000000000000..038f1b0353afa72e6a7d30c605ef5ad390fc4184 GIT binary patch literal 131436 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 zö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 literal 0 HcmV?d00001 diff --git a/res/glass.png b/res/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..ecbadad07be26aec91296a4adb7ebde8e98fd407 GIT binary patch literal 4063 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 literal 0 HcmV?d00001 diff --git a/res/krug.png b/res/krug.png new file mode 100644 index 0000000000000000000000000000000000000000..706a69e65511eea38a9075818741c27ad4984e8d GIT binary patch literal 6132 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 literal 0 HcmV?d00001 diff --git a/ws/client/ws_client.py b/ws/client/ws_client.py new file mode 100644 index 0000000..e1fe40b --- /dev/null +++ b/ws/client/ws_client.py @@ -0,0 +1,132 @@ +import asyncio +import websockets +from threading import Thread +from queue import Queue +from time import sleep +import json +from ws.connection import IConnection + + +class WsClient: + def __init__(self, listener: IConnection): + self.listener = listener + self.loop = asyncio.new_event_loop() + self.stop = None + self.bg_thread = None + + def bg_run(self, uri): + print("bg_run: started") + asyncio.set_event_loop(self.loop) + fut = asyncio.ensure_future(self.run_client(uri), loop=self.loop) + self.loop.run_until_complete(fut) + self.stop = None + print("bg_run: terminated") + + def connect(self, uri): + if self.bg_thread is not None and self.bg_thread.is_alive(): + return + + self.stop: asyncio.Future[None] = self.loop.create_future() + self.bg_thread = Thread(target=self.bg_run, args=(uri,)) + self.bg_thread.setDaemon(True) + self.bg_thread.start() + + def disconnect(self): + if self.stop is not None: + self.loop.call_soon_threadsafe(self.stop.set_result, None) + self.bg_thread.join() + + async def run_client(self, uri): + try: + websocket = await websockets.connect(uri, loop=self.loop) + except Exception as exc: + print(f"Failed to connect to {uri}: {exc}.") + return + + print("handler: got connection to {}".format(websocket.remote_address)) + self.listener.on_connect() + try: + path = "/" + consumer_task = asyncio.ensure_future(self.handler_recv(websocket, path), loop=self.loop) + producer_task = asyncio.ensure_future(self.handler_send(websocket, path), loop=self.loop) + done, pending = await asyncio.wait([consumer_task, producer_task, self.stop], return_when=asyncio.FIRST_COMPLETED,) + for task in pending: + task.cancel() + finally: + print("handler: lost connection from {}".format(websocket.remote_address)) + await websocket.close() + self.listener.on_disconnect() + + async def handler_recv(self, websocket, path): + while True: + try: + data = await websocket.recv() + await self.listener.on_recv(data) + except: + print("handler_recv: lost connection from {}".format(websocket.remote_address)) + return + + async def handler_send(self, websocket, path): + while True: + data = await self.listener.on_send() + if data is not None: + try: + await websocket.send(json.dumps(data)) + except: + print("handler_send: lost connection from {}".format(websocket.remote_address)) + break + + +class PeriodicUpdater(IConnection): + def __init__(self): + self.ws_client = WsClient(self) + + self.state = Queue() + self.thread_cancel = True + self.thread = None + + def connect(self, uri): + self.ws_client.connect(uri) + + def disconnect(self): + self.ws_client.disconnect() + + def on_connect(self): + self.thread_cancel = False + self.thread = Thread(target=self.run) + self.thread.setDaemon(True) + self.thread.start() + + def on_disconnect(self): + self.thread_cancel = True + self.thread.join(1) + + async def on_send(self): + return await asyncio.get_event_loop().run_in_executor(None, self.state.get) + + async def on_recv(self, data): + print("R: {}".format(data)) + + def send(self, data): + self.state.put_nowait(data) + + def run(self): + count = 0 + while not self.thread_cancel: + self.send({"Value": count}) + count += 1 + sleep(0.5) + + +if __name__ == '__main__': + + ws = PeriodicUpdater() + ws.connect(uri="ws://localhost:8765") + + sleep(5) + ws.disconnect() + sleep(1) + ws.connect(uri="ws://localhost:8765") + + while True: + sleep(1) \ No newline at end of file diff --git a/ws/connection.py b/ws/connection.py new file mode 100644 index 0000000..062aaa4 --- /dev/null +++ b/ws/connection.py @@ -0,0 +1,19 @@ +import abc + + +class IConnection: + @abc.abstractmethod + def on_connect(self): + pass + + @abc.abstractmethod + def on_disconnect(self): + pass + + @abc.abstractmethod + def on_recv(self, data): + pass + + @abc.abstractmethod + def on_send(self): + return None diff --git a/ws/message.py b/ws/message.py new file mode 100644 index 0000000..3e21dad --- /dev/null +++ b/ws/message.py @@ -0,0 +1,77 @@ +import asyncio +from ws.connection import IConnection +import json + + +class MsgIo: + def __init__(self, key, send): + self.key = key + self.sender = send + self.receiver = None + + def set_recv_handler(self, handler): + self.receiver = handler + + async def on_recv(self, data): + print("MessageHandler {}".format(data)) + if self.receiver is not None: + await self.receiver(data[self.key]) + + async def send(self, data): + return await self.sender({self.key: data}) + + def can_key(self, key): + return self.key == key + + def get_key(self): + return self.key + + +class Value: + def __init__(self, initial=None): + self.value = initial + self.has_changed = True + + def set(self, value): + self.has_changed = self.value != value + self.value = value + + def is_changed(self): + return self.has_changed + + def get(self): + self.has_changed = False + return self.value + + +class MessageDispatcher(IConnection): + def __init__(self): + self.msg_handlers: MsgIo = [] + self.state = asyncio.Queue() + + def msgio_get(self, key): + obj = MsgIo(key, self.send) + if key not in self.msg_handlers: + self.msg_handlers.append(obj) + return obj + return None + + def on_connect(self): + pass + + def on_disconnect(self): + pass + + async def on_recv(self, data): + d = json.loads(data) + for key_req in d.keys(): + for h in self.msg_handlers: + if h.can_key(key_req): + await h.on_recv(d) + + async def on_send(self): + return await self.state.get() + + async def send(self, data): + await self.state.put(data) + diff --git a/ws/server/ws_server.py b/ws/server/ws_server.py new file mode 100644 index 0000000..bdf7cbd --- /dev/null +++ b/ws/server/ws_server.py @@ -0,0 +1,39 @@ +import asyncio +import websockets +import abc + + +class WsServer: + def __init__(self, loop=None): + if loop is None: + self.loop = asyncio.get_event_loop() + else: + self.loop = loop + + async def listen(self, host, port): + return await websockets.serve(self.handler, host, port, loop=self.loop) + + def disconnect(self): + pass + + async def handler(self, websocket, path): + print("handler: got connection from {}".format(websocket.remote_address)) + await self.register(websocket) + try: + consumer_task = asyncio.ensure_future(self.handler_recv(websocket, path), loop=self.loop) + producer_task = asyncio.ensure_future(self.handler_send(websocket, path), loop=self.loop) + done, pending = await asyncio.wait([consumer_task, producer_task], return_when=asyncio.FIRST_COMPLETED,) + for task in pending: + task.cancel() + finally: + print("handler: lost connection from {}".format(websocket.remote_address)) + await self.unregister(websocket) + + @abc.abstractmethod + async def handler_recv(self, websocket, path): + pass + + @abc.abstractmethod + async def handler_send(self, websocket, path): + pass + diff --git a/ws/server/ws_server_multi_user.py b/ws/server/ws_server_multi_user.py new file mode 100644 index 0000000..c7d5f20 --- /dev/null +++ b/ws/server/ws_server_multi_user.py @@ -0,0 +1,67 @@ +import asyncio +from ws.server.ws_server import WsServer +from ws.user import User, UserSet, update +import abc +from ws.connection import IConnection + + +class IWsServer: + @abc.abstractmethod + def on_recv(self, data, loop): + pass + + @abc.abstractmethod + def on_send(self, loop): + pass + + +class WsServerMultiUser(WsServer): + def __init__(self, loop=None, listener: IConnection = None): + WsServer.__init__(self, loop) + self.listener = listener + self.USERS = UserSet() + self.global_state = {} + + async def notify_state(self, data): + if self.USERS: # asyncio.wait doesn't accept an empty list + await asyncio.wait([user.send(data) for user in self.USERS]) + + async def notify_users(self): + if self.USERS: # asyncio.wait doesn't accept an empty list + message = {"info": {"type": "users", "count": len(self.USERS)}} + await asyncio.wait([user.send(message) for user in self.USERS]) + + async def register(self, websocket): + usr = User(websocket) + usr.path_add("info") + self.USERS.add(websocket, usr) + await self.notify_users() + + async def unregister(self, websocket): + self.USERS.remove(websocket) + await self.notify_users() + + async def handler_recv(self, websocket, path): + while True: + try: + data = await websocket.recv() + usr = self.USERS.get(websocket) + processed = await usr.process(data) + if processed: + await usr.send(self.global_state) + else: + await self.listener.on_recv(data) + except Exception as e: + print(e) + break + + async def handler_send(self, websocket, path): + while True: + data = await self.listener.on_send() + try: + await self.notify_state(data) + # Update global state + self.global_state = update(self.global_state, data) + except Exception as e: + print(e) + break diff --git a/ws/user.py b/ws/user.py new file mode 100644 index 0000000..046a892 --- /dev/null +++ b/ws/user.py @@ -0,0 +1,132 @@ +import dpath.util as dp +import json + + +def update(d, u, only_existing=True): + for k, v in u.items(): + if isinstance(v, dict): + if only_existing: + r = update(d.get(k, {}), v) + d[k] = r + else: + d[k] = v + else: + d[k] = u[k] + return d + + +class User: + def __init__(self, socket): + self.socket = socket + self.paths = [] + + async def send(self, data): + result = {} + for path in self.paths: + msg = dp.search(data, path) + result.update(msg) + if len(result) != 0: + await self.socket.send(json.dumps(result)) + + async def process(self, data): + handled = True + try: + # Handle message subscription + d = json.loads(data) + if "+" in d: + path = d['+'] + print("Received subscribe {}".format(path)) + self.path_add(path) + elif "-" in d: + path = d['-'] + print("Received unsubscribe {}".format(path)) + self.path_remove(path) + elif "?" in d: + print("Subscriptions: {}".format(self.paths)) + await self.socket.send(json.dumps({"?": self.paths})) + else: + handled = False + except Exception as e: + print(e) + + return handled + + def path_add(self, path): + if path not in self.paths: + self.paths.append(path) + + def path_remove(self, path): + if path in self.paths: + self.paths.remove(path) + + +class UserSet: + def __init__(self): + self.users = {} + self.keys = None + + def __len__(self): + return len(self.users) + + def clear(self): + self.users = {} + self.keys = None + + def add(self, key, user): + self.users[key] = user + + def remove(self, key): + self.users.pop(key, None) + + def get(self, key): + return self.users[key] + + def __iter__(self): + self.keys = iter(self.users.keys()) + return self + + def __next__(self): + return self.users[next(self.keys)] + + +def check_fill(u): + if u: + print("Is occupied") + else: + print("Is empty") + + +if __name__ == '__main__': + userset = UserSet() + check_fill(userset) + + userset.add(1, "A") + userset.add(2, "B") + userset.add(3, "C") + check_fill(userset) + + print("Len(userset) = {}".format(userset)) + for i in userset: + print(i) + + userset.remove(3) + for i in userset: + print(i) + + userset.remove(2) + for i in userset: + print(i) + + userset.remove(1) + for i in userset: + print(i) + + a = {'Pot': {'Temp': 15.5}} + b = {'Pot': {'Power': 2400}} + + print(a) + print(b) + + a = update(a, b) + + print("a | b = {}".format(a)) diff --git a/ws_client_gui.py b/ws_client_gui.py new file mode 100644 index 0000000..13edf0c --- /dev/null +++ b/ws_client_gui.py @@ -0,0 +1,251 @@ +# This is a sample Python script. +import asyncio +import sys +from PyQt5 import QtGui, QtWidgets, QtCore +from ws.client.ws_client import WsClient +from ws.connection import IConnection +import json +from queue import Queue + + +class Window(QtWidgets.QMainWindow, IConnection): + + # Use signals and slots to avoid crashes + # during updating gui elements from websocket context + upd_progressbar_signal = QtCore.pyqtSignal(int, int) + upd_color_signal = QtCore.pyqtSignal(str) + + def __init__(self): + QtWidgets.QMainWindow.__init__(self) + self.ws_client = WsClient(self) + self.is_exit_gracefully = True + self.textEdit = None + self.progressbar = [] + self.styleChoice = None + + self.setGeometry(50, 50, 500, 300) + self.setWindowTitle("Hallo Mausi!") + self.setWindowIcon(QtGui.QIcon('res/flasche.png')) + + self.menubar_create() + self.statusbar_create() + self.toolbar_create() + self.buttons_create() + self.checkbox_create() + + self.progressbar_create() + self.style_chooser_create() + self.calendar_create() + + self.send_data = Queue() + self.show() + + self.upd_progressbar_signal.connect(self.upd_progressbar_slot) + self.upd_color_signal.connect(self.upd_color_slot) + + def calendar_create(self): + cal = QtWidgets.QCalendarWidget(self) + cal.move(500, 200) + cal.resize(250, 250) + + def menubar_create(self): + mainMenu = self.menuBar() + fileMenu = mainMenu.addMenu("&File") + + actionExit = QtWidgets.QAction("&Exit", self) + actionExit.setShortcut("Ctrl+Q") + actionExit.setStatusTip("Leave the App") + actionExit.triggered.connect(self.on_btn_exit_clicked) + + actionEditor = QtWidgets.QAction("&Editor", self) + actionEditor.setShortcut("Ctrl+E") + actionEditor.setStatusTip("Open Editor") + actionEditor.triggered.connect(self.on_action_editor) + + actionFileOpener = QtWidgets.QAction("File &Open", self) + actionFileOpener.setShortcut("Ctrl+O") + actionFileOpener.setStatusTip("Open a file") + actionFileOpener.triggered.connect(self.on_action_file_open) + + actionFileSaver = QtWidgets.QAction("File &Save", self) + actionFileSaver.setShortcut("Ctrl+S") + actionFileSaver.setStatusTip("Save a file") + actionFileSaver.triggered.connect(self.on_action_file_save) + + fileMenu.addAction(actionExit) + fileMenu.addAction(actionEditor) + fileMenu.addAction(actionFileOpener) + fileMenu.addAction(actionFileSaver) + + def statusbar_create(self): + statusBar = self.statusBar() + + def toolbar_create(self): + def action_caller(a, n): + return lambda action: self.on_action_triggered(a, n) + + action1 = QtWidgets.QAction(QtGui.QIcon('res/glass.png'), "Drink a beer!", self) + action1.triggered.connect(action_caller(action1, 1)) + + action2 = QtWidgets.QAction(QtGui.QIcon('res/glass2.png'), "Drink more beer!", self) + action2.triggered.connect(action_caller(action2, 2)) + + action3 = QtWidgets.QAction(QtGui.QIcon('res/glass_flasche.png'), "Choose font!", self) + action3.triggered.connect(self.on_action_font_triggered) + + action4 = QtWidgets.QAction(QtGui.QIcon('res/dose.png'), "Choose color!", self) + action4.triggered.connect(self.on_action_color_triggered) + + toolbar = self.addToolBar("Toolbar") + + toolbar.addAction(action1) + toolbar.addAction(action2) + toolbar.addAction(action3) + toolbar.addAction(action4) + + def buttons_create(self): + btn = QtWidgets.QPushButton("Quit", self) + btn.clicked.connect(self.on_btn_exit_clicked) + btn.resize(btn.minimumSizeHint()) + btn.move(0, 100) + + def checkbox_create(self): + checkbox = QtWidgets.QCheckBox('Exit gracefully!', self) + checkbox.stateChanged.connect(self.on_checkbox_changed) + checkbox.setCheckState(2 if self.is_exit_gracefully else 0) + checkbox.move(0, 150) + + def progressbar_create(self): + for i in range(0, 3): + progressbar = QtWidgets.QProgressBar(self) + progressbar.setGeometry(200, 80+25*i, 250, 20) + self.progressbar.append(progressbar) + + btn = QtWidgets.QPushButton("Download", self) + btn.clicked.connect(self.on_btn_download_clicked) + btn.move(0, 70) + + def style_chooser_create(self): + print(self.style().objectName()) + self.styleChoice = QtWidgets.QLabel("Linux", self) + comboxBox = QtWidgets.QComboBox(self) + comboxBox.addItem("motif") + comboxBox.addItem("Windows") + comboxBox.addItem("cde") + comboxBox.addItem("Plastique") + comboxBox.addItem("Cleanlooks") + comboxBox.addItem("windowsvista") + comboxBox.addItem("fusion") + comboxBox.move(50, 250) + self.styleChoice.move(150, 150) + comboxBox.activated[str].connect(self.on_combobox_changed) + + def on_btn_exit_clicked(self): + print('PyQt5 on_btn_click') + self.close() + + def on_action_triggered(self, action, n): + print('PyQt5 on_action_triggered {}'.format(n)) + if n == 1: + self.ws_client.connect(uri="ws://localhost:8765") + if n == 2: + self.ws_client.disconnect() + + def on_action_editor(self): + self.textEdit = QtWidgets.QTextEdit() + self.setCentralWidget(self.textEdit) + + def on_action_file_open(self): + name, _ = QtWidgets.QFileDialog.getOpenFileName(self, 'Open file') + file = open(name, 'r') + + self.on_action_editor() + with file: + text = file.read() + self.textEdit.setText(text) + + def on_action_file_save(self): + + if self.textEdit is not None: + name, _ = QtWidgets.QFileDialog.getSaveFileName(self, 'Save file') + file = open(name, 'w') + text = self.textEdit.toPlainText() + file.write(text) + file.close() + else: + print("No file to save!") + + def on_action_font_triggered(self): + font, valid = QtWidgets.QFontDialog.getFont() + if valid: + self.styleChoice.setFont(font) + + def on_action_color_triggered(self): + color = QtWidgets.QColorDialog.getColor() + self.send_data.put({'Color': color.name()}) + + def on_checkbox_changed(self, state): + print('PyQt5 on_checkbox_changed, state={}'.format(state)) + if state == QtCore.Qt.Checked: + self.is_exit_gracefully = True + else: + self.is_exit_gracefully = False + + def on_btn_download_clicked(self): + print("Nothing happens!") + + def on_combobox_changed(self, text): + self.styleChoice.setText(text) + QtWidgets.QApplication.setStyle(QtWidgets.QStyleFactory.create(text)) + + def on_connect(self): + self.send_data.put_nowait({'+':'a'}) + self.send_data.put_nowait({'+':'b'}) + self.send_data.put_nowait({'+':'c'}) + self.send_data.put_nowait({'+':'Color'}) + + def on_disconnect(self): + pass + + @QtCore.pyqtSlot(int, int) + def upd_progressbar_slot(self, n, v): + self.progressbar[n].setValue(v) + + @QtCore.pyqtSlot(str) + def upd_color_slot(self, color_str): + self.styleChoice.setStyleSheet("QWidget {background-color: %s}" % color_str) + + async def on_recv(self, data): + try: + d = json.loads(data) + keys = {'a': 0, 'b': 1, 'c': 2} + color = {'Color': 0} + for cmd in d: + if cmd in keys.keys(): + await asyncio.get_event_loop().run_in_executor(None, self.upd_progressbar_signal.emit(keys[cmd], int(d[cmd] + 0.5))) + + if cmd in color.keys(): + await asyncio.get_event_loop().run_in_executor(None, self.upd_color_signal.emit(d[cmd])) + except: + pass + + async def on_send(self): + try: + data = await asyncio.get_event_loop().run_in_executor(None, self.send_data.get, True, 1) + return data + except: + return None + + def closeEvent(self, event): + if self.is_exit_gracefully: + print("Exitting gracefully!") + self.ws_client.disconnect() + + +if __name__ == '__main__': + app = QtWidgets.QApplication(sys.argv) + + gui = Window() + sys.exit(app.exec_()) + +# See PyCharm help at https://www.jetbrains.com/help/pycharm/