[patch] 修改逻辑: 在用户误触或开了多个GUI程序的时候不能同时建立多个连接 确保一个账号只能建立一个与后端的连接

This commit is contained in:
2025-10-11 15:30:12 +08:00
parent 2dd384e8e4
commit 160b3f38ed
3 changed files with 121 additions and 5 deletions

View File

@@ -31,6 +31,7 @@ class BackendClient:
self.success_callback: Optional[Callable] = None # 新增:后端连接成功回调
self.token_error_callback: Optional[Callable] = None # 新增token错误回调
self.version_callback: Optional[Callable] = None # 新增:版本检查回调
self.disconnect_callback: Optional[Callable] = None # 新增:被踢下线回调
self.is_connected = False
@@ -265,7 +266,8 @@ class BackendClient:
login: Callable = None,
success: Callable = None,
token_error: Callable = None,
version: Callable = None):
version: Callable = None,
disconnect: Callable = None):
"""设置各种消息类型的回调函数"""
if store_list:
self.store_list_callback = store_list
@@ -287,6 +289,8 @@ class BackendClient:
self.token_error_callback = token_error
if version:
self.version_callback = version
if disconnect:
self.disconnect_callback = disconnect
def on_connected(self):
"""连接成功时的处理"""
@@ -443,6 +447,8 @@ class BackendClient:
self._handle_staff_list(message)
elif msg_type == 'version_response': # 新增:版本检查响应
self._handle_version_response(message)
elif msg_type == 'disconnect': # 新增:被踢下线
self._handle_disconnect(message)
else:
print(f"未知消息类型: {msg_type}")
@@ -1228,6 +1234,19 @@ class BackendClient:
if self.version_callback:
self.version_callback(message)
def _handle_disconnect(self, message: Dict[str, Any]):
"""处理被踢下线消息"""
disconnect_message = message.get('message', '您的账号在其他设备登录,当前连接已断开')
print(f"[断开] 收到后端断开通知: {disconnect_message}")
# 停止重连机制(不再尝试重连)
self.should_stop = True
# 触发断开回调
if self.disconnect_callback:
self.disconnect_callback(disconnect_message)
# ==================== 辅助方法 ====================