mirror of
https://github.com/XiaoMi/ha_xiaomi_home.git
synced 2026-01-14 21:40:42 +08:00
fix: fix mips re-connect error
This commit is contained in:
parent
36bf686629
commit
00a8c69f4b
@ -356,7 +356,7 @@ class MIoTClient:
|
||||
# Cloud mips
|
||||
self._mips_cloud.unsub_mips_state(
|
||||
key=f'{self._uid}-{self._cloud_server}')
|
||||
self._mips_cloud.disconnect()
|
||||
self._mips_cloud.deinit()
|
||||
# Cancel refresh cloud devices
|
||||
if self._refresh_cloud_devices_timer:
|
||||
self._refresh_cloud_devices_timer.cancel()
|
||||
@ -369,7 +369,7 @@ class MIoTClient:
|
||||
for mips in self._mips_local.values():
|
||||
mips.on_dev_list_changed = None
|
||||
mips.unsub_mips_state(key=mips.group_id)
|
||||
mips.disconnect()
|
||||
mips.deinit()
|
||||
if self._mips_local_state_changed_timers:
|
||||
for timer_item in (
|
||||
self._mips_local_state_changed_timers.values()):
|
||||
|
||||
@ -229,6 +229,7 @@ class _MipsClient(ABC):
|
||||
_ca_file: Optional[str]
|
||||
_cert_file: Optional[str]
|
||||
_key_file: Optional[str]
|
||||
_tls_done: bool
|
||||
|
||||
_mqtt_logger: Optional[logging.Logger]
|
||||
_mqtt: Client
|
||||
@ -271,6 +272,7 @@ class _MipsClient(ABC):
|
||||
self._ca_file = ca_file
|
||||
self._cert_file = cert_file
|
||||
self._key_file = key_file
|
||||
self._tls_done = False
|
||||
|
||||
self._mqtt_logger = None
|
||||
self._mqtt_fd = -1
|
||||
@ -328,19 +330,36 @@ class _MipsClient(ABC):
|
||||
self._client_id if thread_name is None else thread_name)
|
||||
self._mips_thread.start()
|
||||
|
||||
@final
|
||||
def close(self) -> None:
|
||||
self._internal_loop.call_soon_threadsafe(self.__mips_close)
|
||||
if self._mips_thread:
|
||||
self._mips_thread.join()
|
||||
async def connect_async(self) -> None:
|
||||
"""mips connect async."""
|
||||
self.connect()
|
||||
await self._event_connect.wait()
|
||||
|
||||
def disconnect(self) -> None:
|
||||
"""mips disconnect."""
|
||||
if not self._mips_thread:
|
||||
return
|
||||
self._internal_loop.call_soon_threadsafe(self.__mips_disconnect)
|
||||
self._mips_thread.join()
|
||||
self._mips_thread = None
|
||||
self._internal_loop.close()
|
||||
|
||||
async def disconnect_async(self) -> None:
|
||||
"""mips disconnect async."""
|
||||
self.disconnect()
|
||||
await self._event_disconnect.wait()
|
||||
|
||||
@final
|
||||
def deinit(self) -> None:
|
||||
self.disconnect()
|
||||
|
||||
self._logger = None
|
||||
self._username = None
|
||||
self._password = None
|
||||
self._ca_file = None
|
||||
self._cert_file = None
|
||||
self._key_file = None
|
||||
self._tls_done = False
|
||||
self._mqtt_logger = None
|
||||
with self._mips_state_sub_map_lock:
|
||||
self._mips_state_sub_map.clear()
|
||||
@ -375,20 +394,6 @@ class _MipsClient(ABC):
|
||||
else:
|
||||
self._mqtt.disable_logger()
|
||||
|
||||
async def connect_async(self) -> None:
|
||||
"""mips connect async."""
|
||||
self.connect()
|
||||
await self._event_connect.wait()
|
||||
|
||||
def disconnect(self) -> None:
|
||||
"""mips disconnect."""
|
||||
self._internal_loop.call_soon_threadsafe(self.__mips_disconnect)
|
||||
|
||||
async def disconnect_async(self) -> None:
|
||||
"""mips disconnect async."""
|
||||
self.disconnect()
|
||||
await self._event_disconnect.wait()
|
||||
|
||||
@final
|
||||
def sub_mips_state(
|
||||
self, key: str, handler: Callable[[str, bool], Coroutine]
|
||||
@ -586,19 +591,21 @@ class _MipsClient(ABC):
|
||||
if self._username:
|
||||
self._mqtt.username_pw_set(
|
||||
username=self._username, password=self._password)
|
||||
if (
|
||||
self._ca_file
|
||||
and self._cert_file
|
||||
and self._key_file
|
||||
):
|
||||
self._mqtt.tls_set(
|
||||
tls_version=ssl.PROTOCOL_TLS_CLIENT,
|
||||
ca_certs=self._ca_file,
|
||||
certfile=self._cert_file,
|
||||
keyfile=self._key_file)
|
||||
else:
|
||||
self._mqtt.tls_set(tls_version=ssl.PROTOCOL_TLS_CLIENT)
|
||||
self._mqtt.tls_insecure_set(True)
|
||||
if not self._tls_done:
|
||||
if (
|
||||
self._ca_file
|
||||
and self._cert_file
|
||||
and self._key_file
|
||||
):
|
||||
self._mqtt.tls_set(
|
||||
tls_version=ssl.PROTOCOL_TLS_CLIENT,
|
||||
ca_certs=self._ca_file,
|
||||
certfile=self._cert_file,
|
||||
keyfile=self._key_file)
|
||||
else:
|
||||
self._mqtt.tls_set(tls_version=ssl.PROTOCOL_TLS_CLIENT)
|
||||
self._mqtt.tls_insecure_set(True)
|
||||
self._tls_done = True
|
||||
self._mqtt.on_connect = self.__on_connect
|
||||
self._mqtt.on_connect_fail = self.__on_connect_failed
|
||||
self._mqtt.on_disconnect = self.__on_disconnect
|
||||
@ -776,10 +783,6 @@ class _MipsClient(ABC):
|
||||
self._internal_loop.remove_writer(self._mqtt_fd)
|
||||
self._mqtt_fd = -1
|
||||
self._mqtt.disconnect()
|
||||
|
||||
def __mips_close(self) -> None:
|
||||
self.log_info('mips client closing')
|
||||
self.__mips_disconnect()
|
||||
self._internal_loop.stop()
|
||||
|
||||
def __get_next_reconnect_time(self) -> float:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user