@@ -40,7 +40,7 @@ def data_received(self, message):
4040 self .on_message_received (parser_msg )
4141
4242 def connection_lost (self , exc : Optional [Exception ]):
43- self .loop . run_until_complete ( self . async_disconnect () )
43+ self .sync_disconnect ( )
4444 self .on_connection_lost (exc )
4545
4646 def is_connected (self ):
@@ -53,27 +53,29 @@ async def keep_alive_func(self, _=None):
5353 async def async_connect (self ) -> None :
5454 async with self ._mutex :
5555 try :
56- is_connected = self .is_connected ()
57- if not is_connected :
56+ if not self .is_connected ():
57+ self . sync_disconnect ()
5858 async with async_timeout .timeout (QUEUE_TIMEOUT ):
5959 _LOGGER .info (f"Connecting to { self .host } " )
6060 self .transport , _ = await self .loop .create_connection ( # type: ignore
6161 lambda : self , self .host , 58867
6262 )
6363 _LOGGER .info (f"Connected to { self .host } " )
64+ await self .hello ()
65+ await self .keep_alive_func ()
6466 except Exception as e :
6567 raise RoborockConnectionException (f"Failed connecting to { self .host } " ) from e
66- if not is_connected :
67- await self .hello ()
68- await self .keep_alive_func ()
68+
69+ def sync_disconnect (self ) -> None :
70+ if self .transport and self .loop .is_running ():
71+ _LOGGER .debug (f"Disconnecting from { self .host } " )
72+ self .transport .close ()
73+ if self .keep_alive_task :
74+ self .keep_alive_task .cancel ()
6975
7076 async def async_disconnect (self ) -> None :
7177 async with self ._mutex :
72- if self .transport and self .loop .is_running ():
73- _LOGGER .debug (f"Disconnecting from { self .host } " )
74- self .transport .close ()
75- if self .keep_alive_task :
76- self .keep_alive_task .cancel ()
78+ self .sync_disconnect ()
7779
7880 def build_roborock_message (self , method : RoborockCommand , params : Optional [list | dict ] = None ) -> RoborockMessage :
7981 secured = True if method in COMMANDS_SECURED else False
@@ -98,7 +100,7 @@ async def hello(self):
98100 protocol = RoborockMessageProtocol .HELLO_REQUEST
99101 _LOGGER .debug (f"id={ request_id } Requesting protocol { protocol .name } " )
100102 try :
101- return await self .send_message (
103+ return await self ._send_message (
102104 RoborockMessage (protocol = protocol , payload = None , seq = request_id , version = b"1.0" , random = 22 )
103105 )
104106 except Exception as e :
@@ -110,7 +112,7 @@ async def ping(self):
110112 protocol = RoborockMessageProtocol .PING_REQUEST
111113 _LOGGER .debug (f"id={ request_id } Requesting protocol { protocol .name } " )
112114 try :
113- return await self .send_message (
115+ return await self ._send_message (
114116 RoborockMessage (protocol = protocol , payload = None , seq = request_id , version = b"1.0" , random = 23 )
115117 )
116118 except Exception as e :
@@ -150,8 +152,7 @@ def _send_msg_raw(self, data: bytes):
150152 except Exception as e :
151153 raise RoborockException (e ) from e
152154
153- async def send_message (self , roborock_messages : list [RoborockMessage ] | RoborockMessage ):
154- await self .validate_connection ()
155+ async def _send_message (self , roborock_messages : list [RoborockMessage ] | RoborockMessage ):
155156 if isinstance (roborock_messages , RoborockMessage ):
156157 roborock_messages = [roborock_messages ]
157158 local_key = self .device_info .device .local_key
@@ -170,3 +171,7 @@ async def send_message(self, roborock_messages: list[RoborockMessage] | Roborock
170171 if exception :
171172 raise exception
172173 return responses
174+
175+ async def send_message (self , roborock_messages : list [RoborockMessage ] | RoborockMessage ):
176+ await self .validate_connection ()
177+ return await self ._send_message (roborock_messages )
0 commit comments