Todo: 修改因exe_token错误导致的不断重连问题
Todo: 修改打包中.bat打包文件与测试打包脚本不一致问题 New: 新增installer安装包环境搭建数据
This commit is contained in:
@@ -29,6 +29,7 @@ class BackendClient:
|
||||
self.error_callback: Optional[Callable] = None
|
||||
self.login_callback: Optional[Callable] = None # 新增:平台登录(下发cookies)回调
|
||||
self.success_callback: Optional[Callable] = None # 新增:后端连接成功回调
|
||||
self.token_error_callback: Optional[Callable] = None # 新增:token错误回调
|
||||
|
||||
self.is_connected = False
|
||||
|
||||
@@ -261,7 +262,8 @@ class BackendClient:
|
||||
close: Callable = None,
|
||||
error: Callable = None,
|
||||
login: Callable = None,
|
||||
success: Callable = None):
|
||||
success: Callable = None,
|
||||
token_error: Callable = None):
|
||||
"""设置各种消息类型的回调函数"""
|
||||
if store_list:
|
||||
self.store_list_callback = store_list
|
||||
@@ -279,6 +281,8 @@ class BackendClient:
|
||||
self.login_callback = login
|
||||
if success:
|
||||
self.success_callback = success
|
||||
if token_error:
|
||||
self.token_error_callback = token_error
|
||||
|
||||
def on_connected(self):
|
||||
"""连接成功时的处理"""
|
||||
@@ -338,7 +342,7 @@ class BackendClient:
|
||||
active_store_id = None
|
||||
try:
|
||||
from Utils.JD.JdUtils import WebsocketManager as JdManager
|
||||
from Utils.Dy.DyUtils import WebsocketManager as DyManager
|
||||
from Utils.Dy.DyUtils import DouYinWebsocketManager as DyManager
|
||||
from Utils.Pdd.PddUtils import WebsocketManager as PddManager
|
||||
|
||||
# 检查各平台是否有活跃连接
|
||||
@@ -429,6 +433,8 @@ class BackendClient:
|
||||
self._handle_login(message)
|
||||
elif msg_type == 'error':
|
||||
self._handle_error_message(message)
|
||||
elif msg_type == 'error_token':
|
||||
self._handle_token_error(message)
|
||||
elif msg_type == 'staff_list':
|
||||
self._handle_staff_list(message)
|
||||
else:
|
||||
@@ -1163,10 +1169,35 @@ class BackendClient:
|
||||
def _handle_error_message(self, message: Dict[str, Any]):
|
||||
"""处理错误消息"""
|
||||
error_msg = message.get('error', '未知错误')
|
||||
content = message.get('content', '')
|
||||
|
||||
# 检查是否为token错误(无论type是error还是error_token)
|
||||
if content == "无效的exe_token" or "无效的exe_token" in content:
|
||||
print(f"[错误] 检测到token错误: {content}")
|
||||
self._handle_token_error(message)
|
||||
return
|
||||
|
||||
print(f"后端连接错误: {error_msg}")
|
||||
if self.error_callback:
|
||||
self.error_callback(error_msg, message)
|
||||
|
||||
def _handle_token_error(self, message: Dict[str, Any]):
|
||||
"""处理token错误消息 - 无效token时停止重连并显示错误"""
|
||||
error_content = message.get('content', '无效的exe_token')
|
||||
print(f"[错误] Token验证失败: {error_content}")
|
||||
|
||||
# 停止重连机制
|
||||
self.should_stop = True
|
||||
self.is_reconnecting = False
|
||||
|
||||
# 触发token错误回调
|
||||
if self.token_error_callback:
|
||||
self.token_error_callback(error_content)
|
||||
|
||||
# 主动关闭连接
|
||||
if self.websocket:
|
||||
asyncio.run_coroutine_threadsafe(self.websocket.close(), self.loop)
|
||||
|
||||
def _handle_staff_list(self, message: Dict[str, Any]):
|
||||
"""处理客服列表更新消息"""
|
||||
staff_list = message.get('data', {}).get('staff_list', [])
|
||||
|
||||
@@ -35,10 +35,11 @@ class WebSocketManager:
|
||||
'success': None,
|
||||
'error': None,
|
||||
'platform_connected': None,
|
||||
'token_error': None,
|
||||
}
|
||||
|
||||
def set_callbacks(self, log: Callable = None, success: Callable = None, error: Callable = None,
|
||||
platform_connected: Callable = None): # ← 新增参数
|
||||
platform_connected: Callable = None, token_error: Callable = None):
|
||||
"""设置回调函数"""
|
||||
if log:
|
||||
self.callbacks['log'] = log
|
||||
@@ -48,6 +49,8 @@ class WebSocketManager:
|
||||
self.callbacks['error'] = error
|
||||
if platform_connected: # ← 新增
|
||||
self.callbacks['platform_connected'] = platform_connected
|
||||
if token_error:
|
||||
self.callbacks['token_error'] = token_error
|
||||
|
||||
def _log(self, message: str, level: str = "INFO"):
|
||||
"""内部日志方法"""
|
||||
@@ -84,33 +87,49 @@ class WebSocketManager:
|
||||
backend = get_backend_client()
|
||||
|
||||
if backend:
|
||||
# 3 如果有客户端更新token并重连
|
||||
backend.set_token(token)
|
||||
# 检查现有客户端是否因token错误而停止
|
||||
if backend.should_stop:
|
||||
self._log("检测到客户端因token错误已停止,创建新的客户端", "INFO")
|
||||
# 断开旧客户端
|
||||
backend.disconnect()
|
||||
# 清除旧客户端引用
|
||||
set_backend_client(None)
|
||||
backend = None
|
||||
else:
|
||||
# 3 如果有客户端更新token并重连
|
||||
backend.set_token(token)
|
||||
|
||||
# 设置回调函数
|
||||
def _on_backend_success():
|
||||
try:
|
||||
self._log("连接服务成功", "SUCCESS")
|
||||
if self.callbacks['success']:
|
||||
self.callbacks['success']()
|
||||
except Exception as e:
|
||||
self._log(f"成功回调执行失败: {e}", "ERROR")
|
||||
|
||||
# 设置回调函数
|
||||
def _on_backend_success():
|
||||
try:
|
||||
self._log("连接服务成功", "SUCCESS")
|
||||
if self.callbacks['success']:
|
||||
self.callbacks['success']()
|
||||
except Exception as e:
|
||||
self._log(f"成功回调执行失败: {e}", "ERROR")
|
||||
def _on_backend_login(platform_name: str, store_id: str, cookies: str):
|
||||
self._log(
|
||||
f"收到后端登录指令: 平台={platform_name}, 店铺={store_id}, cookies_len={len(cookies) if cookies else 0}",
|
||||
"INFO")
|
||||
self._handle_platform_login(platform_name, store_id, cookies)
|
||||
|
||||
def _on_backend_login(platform_name: str, store_id: str, cookies: str):
|
||||
self._log(
|
||||
f"收到后端登录指令: 平台={platform_name}, 店铺={store_id}, cookies_len={len(cookies) if cookies else 0}",
|
||||
"INFO")
|
||||
self._handle_platform_login(platform_name, store_id, cookies)
|
||||
def _on_token_error(error_content: str):
|
||||
self._log(f"Token验证失败: {error_content}", "ERROR")
|
||||
if self.callbacks['token_error']:
|
||||
self.callbacks['token_error'](error_content)
|
||||
|
||||
backend.set_callbacks(success=_on_backend_success, login=_on_backend_login)
|
||||
backend.set_callbacks(success=_on_backend_success, login=_on_backend_login, token_error=_on_token_error)
|
||||
|
||||
if not backend.is_connected:
|
||||
backend.connect()
|
||||
|
||||
self.backend_client = backend
|
||||
self._log("令牌已提交,已连接后端。等待后端下发平台cookies后自动连接平台...", "SUCCESS")
|
||||
return True
|
||||
|
||||
if not backend.is_connected:
|
||||
backend.connect()
|
||||
|
||||
self.backend_client = backend
|
||||
self._log("令牌已提交,已连接后端。等待后端下发平台cookies后自动连接平台...", "SUCCESS")
|
||||
return True
|
||||
else:
|
||||
# 如果没有现有客户端或客户端被重置,创建新的
|
||||
if not backend:
|
||||
|
||||
backend = BackendClient.from_exe_token(token)
|
||||
|
||||
@@ -128,7 +147,12 @@ class WebSocketManager:
|
||||
except Exception as e:
|
||||
self._log(f"成功回调执行失败: {e}", "ERROR")
|
||||
|
||||
backend.set_callbacks(login=_on_backend_login, success=_on_backend_success)
|
||||
def _on_token_error(error_content: str):
|
||||
self._log(f"Token验证失败: {error_content}", "ERROR")
|
||||
if self.callbacks['token_error']:
|
||||
self.callbacks['token_error'](error_content)
|
||||
|
||||
backend.set_callbacks(login=_on_backend_login, success=_on_backend_success, token_error=_on_token_error)
|
||||
backend.connect()
|
||||
|
||||
set_backend_client(backend)
|
||||
@@ -402,6 +426,11 @@ class WebSocketManager:
|
||||
self._log("🔄 开始执行 start_with_cookies", "DEBUG")
|
||||
result = asyncio.run(listener.start_with_cookies(store_id=store_id, cookies=data))
|
||||
self._log(f"📊 start_with_cookies 执行结果: {result}", "DEBUG")
|
||||
|
||||
# Cookie启动成功时也要通知GUI
|
||||
if result:
|
||||
self._log("✅ [PDD] Cookie启动成功,平台连接已建立", "SUCCESS")
|
||||
self._notify_platform_connected("拼多多")
|
||||
|
||||
# 根据实际登录结果上报状态给后端
|
||||
if self.backend_client and result not in ["need_verification_code", "verification_code_error", "login_failure"]:
|
||||
|
||||
Reference in New Issue
Block a user