From 73a3c89e043631f19b8f8cb1441e842deceb4700 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez=20Garc=C3=ADa?= Date: Fri, 5 Aug 2022 13:05:52 +0200 Subject: [PATCH] Fixed logout notification --- actor/src/udsactor/client.py | 12 ++++++++++-- actor/src/udsactor/types.py | 4 ++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/actor/src/udsactor/client.py b/actor/src/udsactor/client.py index 941fa008..45c7dc37 100644 --- a/actor/src/udsactor/client.py +++ b/actor/src/udsactor/client.py @@ -185,7 +185,8 @@ class UDSActorClient(threading.Thread): # pylint: disable=too-many-instance-att try: # Notify loging and mark it - self._loginInfo = self.api.login(platform.operations.getCurrentUser(), platform.operations.getSessionType()) + user, sessionType = platform.operations.getCurrentUser(), platform.operations.getSessionType() + self._loginInfo = self.api.login(user, sessionType) if self._loginInfo.max_idle: platform.operations.initIdleDuration(self._loginInfo.max_idle) @@ -197,8 +198,15 @@ class UDSActorClient(threading.Thread): # pylint: disable=too-many-instance-att time.sleep(1.3) # Sleeps between loop iterations + # If login was recognized... + if self._loginInfo.logged_in: + self.api.logout(user + self._extraLogoff, sessionType) + logger.info('Notified logout for %s (%s)', user, sessionType) # Log logout + else: + logger.info('Logout not notified for %s (%s)', user, sessionType) # Log logout + + # Clean up login info self._loginInfo = None - self.api.logout(platform.operations.getCurrentUser() + self._extraLogoff, platform.operations.getSessionType()) except Exception as e: logger.error('Error on client loop: %s', e) diff --git a/actor/src/udsactor/types.py b/actor/src/udsactor/types.py index 8e56122d..c4829523 100644 --- a/actor/src/udsactor/types.py +++ b/actor/src/udsactor/types.py @@ -58,6 +58,10 @@ class LoginResultInfoType(typing.NamedTuple): dead_line: typing.Optional[int] max_idle: typing.Optional[int] # Not provided by broker + @property + def logged_in(self) -> bool: + return self.dead_line is not None or self.max_idle is not None or self.hostname != '' or self.ip != '' + class CertificateInfoType(typing.NamedTuple): private_key: str server_certificate: str