2222 InvalidMessageError ,
2323 NotConnectedError ,
2424)
25+ from simplipy .util import schedule_callback
2526from simplipy .util .dt import utc_from_timestamp
2627
2728if TYPE_CHECKING :
@@ -116,11 +117,7 @@ def __init__(
116117 def _on_expire (self ) -> None :
117118 """Log and act when the watchdog expires."""
118119 LOGGER .info ("Websocket watchdog expired" )
119-
120- if asyncio .iscoroutinefunction (self ._action ):
121- asyncio .create_task (self ._action ())
122- else :
123- self ._loop .call_soon (self ._action ())
120+ schedule_callback (self ._action )
124121
125122 def cancel (self ) -> None :
126123 """Cancel the watchdog."""
@@ -213,9 +210,9 @@ class WebsocketClient:
213210 def __init__ (self , api : API ) -> None :
214211 """Initialize."""
215212 self ._api = api
216- self ._connect_listeners : list [Callable [..., None ]] = []
217- self ._disconnect_listeners : list [Callable [..., None ]] = []
218- self ._event_listeners : list [Callable [..., None ]] = []
213+ self ._connect_callbacks : list [Callable [..., None ]] = []
214+ self ._disconnect_callbacks : list [Callable [..., None ]] = []
215+ self ._event_callbacks : list [Callable [..., None ]] = []
219216 self ._loop = asyncio .get_running_loop ()
220217 self ._watchdog = Watchdog (self .async_reconnect )
221218
@@ -228,15 +225,15 @@ def connected(self) -> bool:
228225 return self ._client is not None and not self ._client .closed
229226
230227 @staticmethod
231- def _add_listener (
232- listener_list : list , callback : Callable [..., Any ]
228+ def _add_callback (
229+ callback_list : list , callback : Callable [..., Any ]
233230 ) -> Callable [..., None ]:
234- """Add a listener callback to a particular list."""
235- listener_list .append (callback )
231+ """Add a callback callback to a particular list."""
232+ callback_list .append (callback )
236233
237234 def remove () -> None :
238235 """Remove the callback."""
239- listener_list .remove (callback )
236+ callback_list .remove (callback )
240237
241238 return remove
242239
@@ -283,44 +280,37 @@ def _parse_message(self, message: dict[str, Any]) -> None:
283280 """Parse an incoming message."""
284281 if message ["type" ] == "com.simplisafe.event.standard" :
285282 event = websocket_event_from_payload (message )
286- for listener in self ._event_listeners :
287- self ._schedule_listener_call (listener , event )
288-
289- def _schedule_listener_call (self , listener : Callable [..., Any ], * args : Any ) -> None :
290- """Schedule a listener to be called."""
291- if asyncio .iscoroutinefunction (listener ):
292- asyncio .create_task (listener (* args ))
293- else :
294- self ._loop .call_soon (listener , * args )
283+ for callback in self ._event_callbacks :
284+ schedule_callback (callback , event )
295285
296- def add_connect_listener (self , callback : Callable [..., Any ]) -> Callable [..., None ]:
297- """Add a listener callback to be called after connecting.
286+ def add_connect_callback (self , callback : Callable [..., Any ]) -> Callable [..., None ]:
287+ """Add a callback callback to be called after connecting.
298288
299289 :param callback: The method to call after connecting
300290 :type callback: ``Callable[..., None]``
301291 """
302- return self ._add_listener (self ._connect_listeners , callback )
292+ return self ._add_callback (self ._connect_callbacks , callback )
303293
304- def add_disconnect_listener (
294+ def add_disconnect_callback (
305295 self , callback : Callable [..., Any ]
306296 ) -> Callable [..., None ]:
307- """Add a listener callback to be called after disconnecting.
297+ """Add a callback callback to be called after disconnecting.
308298
309299 :param callback: The method to call after disconnecting
310300 :type callback: ``Callable[..., None]``
311301 """
312- return self ._add_listener (self ._disconnect_listeners , callback )
302+ return self ._add_callback (self ._disconnect_callbacks , callback )
313303
314- def add_event_listener (self , callback : Callable [..., Any ]) -> Callable [..., None ]:
315- """Add a listener callback to be called upon receiving an event.
304+ def add_event_callback (self , callback : Callable [..., Any ]) -> Callable [..., None ]:
305+ """Add a callback callback to be called upon receiving an event.
316306
317307 Note that callbacks should expect to receive a WebsocketEvent object as a
318308 parameter.
319309
320310 :param callback: The method to call after receiving an event.
321311 :type callback: ``Callable[..., None]``
322312 """
323- return self ._add_listener (self ._event_listeners , callback )
313+ return self ._add_callback (self ._event_callbacks , callback )
324314
325315 async def async_connect (self ) -> None :
326316 """Connect to the websocket server."""
@@ -333,8 +323,8 @@ async def async_connect(self) -> None:
333323
334324 LOGGER .info ("Connected to websocket server" )
335325
336- for listener in self ._connect_listeners :
337- self . _schedule_listener_call ( listener )
326+ for callback in self ._connect_callbacks :
327+ schedule_callback ( callback )
338328
339329 self ._watchdog .trigger ()
340330
@@ -346,8 +336,8 @@ async def async_disconnect(self) -> None:
346336
347337 LOGGER .info ("Disconnected from websocket server" )
348338
349- for listener in self ._disconnect_listeners :
350- self . _schedule_listener_call ( listener )
339+ for callback in self ._disconnect_callbacks :
340+ schedule_callback ( callback )
351341
352342 async def async_listen (self ) -> None :
353343 """Start listening to the websocket server."""
@@ -384,8 +374,8 @@ async def async_listen(self) -> None:
384374 finally :
385375 LOGGER .debug ("Listen completed; cleaning up" )
386376
387- for listener in self ._disconnect_listeners :
388- self . _schedule_listener_call ( listener )
377+ for callback in self ._disconnect_callbacks :
378+ schedule_callback ( callback )
389379
390380 async def async_reconnect (self ) -> None :
391381 """Reconnect (and re-listen, if appropriate) to the websocket."""
0 commit comments