Toggle Connect/Disconnect on the same button once connected

MessageDispatcherSync gains an optional on_connect_changed(bool)
callback, fired from the websocket client's background loop once the
connection is actually live/lost, so the button only flips state on a
real connection change rather than optimistically on click.
This commit is contained in:
2026-06-20 23:04:43 +02:00
parent 9c3ec1dfdf
commit d1a69f19ce
2 changed files with 21 additions and 2 deletions
+13 -1
View File
@@ -160,7 +160,9 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
self.msg_dispatch = MessageDispatcherSync(auto_subscribe=True)
self.msg_dispatch.on_connect_changed = self.on_ws_connect_changed
self.ws_client = WsClient(listener=self.msg_dispatch, loop=loop)
self.connected = False
self.msg_pot = self.msg_dispatch.msgio_get('Pot')
self.msg_sensor = self.msg_dispatch.msgio_get('Sensor')
self.msg_heater = self.msg_dispatch.msgio_get('Heater')
@@ -176,7 +178,7 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow):
self.msg_sud.set_recv_handler(self.on_sud_changed)
self.setupUi(self)
self.btn_connect.clicked.connect(self.connect)
self.btn_connect.clicked.connect(self.on_btn_connect_clicked)
self.actionStop.triggered.connect(self.disconnect)
self.actionSudDownload.triggered.connect(self.on_action_sud_download)
self.actionSudUpload.triggered.connect(self.on_action_sud_upload)
@@ -246,6 +248,16 @@ class Window(QtWidgets.QMainWindow, Ui_MainWindow):
def disconnect(self):
self.ws_client.disconnect()
def on_btn_connect_clicked(self):
if self.connected:
self.disconnect()
else:
self.connect()
def on_ws_connect_changed(self, connected):
self.connected = connected
self.btn_connect.setText("Disconnect" if connected else "Connect")
def on_slider_temp_soll_changed(self, value):
print("on_slider_temp_soll_changed {}".format(value))
self.msg_tempctrl.send({'Soll': {'Temp': value}})