From e1fa0eea795c219a45a4aed5a8d7bb5c7858db5e Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Wed, 25 Mar 2026 05:40:20 +0000 Subject: [PATCH] {Client}.sio is now a private attribute {Client}.wait() added to expose {Client}._sio.wait() and {Client}._sio.sleep() --- streamlabsio/client.py | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/streamlabsio/client.py b/streamlabsio/client.py index 5dbbbf3..93b326c 100644 --- a/streamlabsio/client.py +++ b/streamlabsio/client.py @@ -17,15 +17,15 @@ class Client: self._logger = logger.bind(name=self.__class__.__name__) self._token = token self._raw = raw - self.sio = socketio.Client() - self.sio.on('connect', self._connect_handler) - self.sio.on('event', self._event_handler) - self.sio.on('disconnect', self._disconnect_handler) + self._sio = socketio.Client() + self._sio.on('connect', self._connect_handler) + self._sio.on('event', self._event_handler) + self._sio.on('disconnect', self._disconnect_handler) self.obs = Observable() def __enter__(self) -> 'Client': try: - self.sio.connect(f'https://sockets.streamlabs.com?token={self._token}') + self._sio.connect(f'https://sockets.streamlabs.com?token={self._token}') except socketio.exceptions.ConnectionError as e: self._logger.exception('Connection to Streamlabs Socket API failed') ERR_MSG = 'Failed to connect to Streamlabs Socket API. Please check your token and network connection.' @@ -33,14 +33,31 @@ class Client: return self def __exit__(self, exc_type, exc_val, exc_tb) -> None: - self.sio.disconnect() + self._sio.disconnect() + + def wait(self, seconds: float | None = None) -> None: + """Exposes the wait and sleep methods of the socketio client to allow the user to keep the connection alive. + + + Args: + seconds (float | None): If None, the method will block indefinitely. + + Returns: + None + """ + if seconds is None: + self._sio.wait() + else: + self._sio.sleep(seconds) def _connect_handler(self) -> None: self._logger.info('Connected to Streamlabs Socket API') def _event_handler(self, data: dict) -> None: """ - Handles incoming events and triggers corresponding OBS actions. + Handles incoming events and triggers the callback functions. + + Args: data (dict): The event data containing information about the event. Expected keys: