[patch] 新增用户余额不足 交互模式代码
This commit is contained in:
@@ -32,6 +32,7 @@ class BackendClient:
|
||||
self.token_error_callback: Optional[Callable] = None # 新增:token错误回调
|
||||
self.version_callback: Optional[Callable] = None # 新增:版本检查回调
|
||||
self.disconnect_callback: Optional[Callable] = None # 新增:被踢下线回调
|
||||
self.balance_insufficient_callback: Optional[Callable] = None # 新增:余额不足回调
|
||||
self.log_callback: Optional[Callable] = None # 新增:日志回调
|
||||
|
||||
self.is_connected = False
|
||||
@@ -52,7 +53,7 @@ class BackendClient:
|
||||
"""Unified logging method that works in both dev and packaged environments"""
|
||||
# Always print to console (visible in dev mode)
|
||||
print(f"[{level}] {message}")
|
||||
|
||||
|
||||
# Also call the log callback if available (for file logging)
|
||||
if self.log_callback:
|
||||
try:
|
||||
@@ -130,10 +131,10 @@ class BackendClient:
|
||||
self._log("已禁用心跳机制", "WARNING")
|
||||
|
||||
self.is_connected = True
|
||||
|
||||
|
||||
# 🔥 在重置之前记录是否是重连(用于后续上报平台状态)
|
||||
was_reconnecting = self.reconnect_attempts > 0
|
||||
|
||||
|
||||
self.reconnect_attempts = 0 # 重置重连计数
|
||||
self.is_reconnecting = False
|
||||
self._log("后端WebSocket连接成功", "SUCCESS")
|
||||
@@ -285,6 +286,7 @@ class BackendClient:
|
||||
token_error: Callable = None,
|
||||
version: Callable = None,
|
||||
disconnect: Callable = None,
|
||||
balance_insufficient: Callable = None,
|
||||
log: Callable = None):
|
||||
"""设置各种消息类型的回调函数"""
|
||||
if store_list:
|
||||
@@ -309,6 +311,8 @@ class BackendClient:
|
||||
self.version_callback = version
|
||||
if disconnect:
|
||||
self.disconnect_callback = disconnect
|
||||
if balance_insufficient:
|
||||
self.balance_insufficient_callback = balance_insufficient
|
||||
if log:
|
||||
self.log_callback = log
|
||||
|
||||
@@ -333,11 +337,11 @@ class BackendClient:
|
||||
if hasattr(manager, 'platform_listeners') and manager.platform_listeners:
|
||||
platform_count = len(manager.platform_listeners)
|
||||
self._log(f"🔄 检测到 {platform_count} 个活跃平台连接,准备重新上报状态", "INFO")
|
||||
|
||||
|
||||
# 延迟1秒,确保后端完全准备好
|
||||
import time
|
||||
time.sleep(1.0)
|
||||
|
||||
|
||||
for platform_key, listener_info in manager.platform_listeners.items():
|
||||
store_id = listener_info.get('store_id')
|
||||
platform = listener_info.get('platform')
|
||||
@@ -353,7 +357,7 @@ class BackendClient:
|
||||
"status": True,
|
||||
"cookies": "" # 重连时无需再次发送cookies
|
||||
}
|
||||
|
||||
|
||||
# 同步发送,确保发送成功
|
||||
future = asyncio.run_coroutine_threadsafe(
|
||||
self._send_to_backend(reconnect_message),
|
||||
@@ -361,7 +365,7 @@ class BackendClient:
|
||||
)
|
||||
# 等待发送完成(最多2秒)
|
||||
future.result(timeout=2)
|
||||
|
||||
|
||||
self._log(f"✅ 已重新上报 {platform} 平台状态: {store_display}", "SUCCESS")
|
||||
except Exception as e:
|
||||
self._log(f"❌ 上报 {platform} 平台状态失败: {e}", "ERROR")
|
||||
@@ -386,7 +390,7 @@ class BackendClient:
|
||||
try:
|
||||
from WebSocket.backend_singleton import get_websocket_manager
|
||||
manager = get_websocket_manager()
|
||||
|
||||
|
||||
# 从 platform_listeners 获取活跃平台
|
||||
if hasattr(manager, 'platform_listeners') and manager.platform_listeners:
|
||||
# 获取第一个活跃平台的 store_id
|
||||
@@ -475,6 +479,8 @@ class BackendClient:
|
||||
self._handle_version_response(message)
|
||||
elif msg_type == 'disconnect': # 新增:被踢下线
|
||||
self._handle_disconnect(message)
|
||||
elif msg_type == 'balance_insufficient': # 新增:余额不足
|
||||
self._handle_balance_insufficient(message)
|
||||
else:
|
||||
print(f"未知消息类型: {msg_type}")
|
||||
|
||||
@@ -1203,7 +1209,8 @@ class BackendClient:
|
||||
self.login_callback(platform_name, store_id, full_message, store_name)
|
||||
else:
|
||||
# 普通Cookie模式
|
||||
print(f"收到登录指令: 平台={platform_name}, 店铺={store_name or store_id}, cookies_len={len(cookies) if cookies else 0}")
|
||||
print(
|
||||
f"收到登录指令: 平台={platform_name}, 店铺={store_name or store_id}, cookies_len={len(cookies) if cookies else 0}")
|
||||
if self.login_callback:
|
||||
self.login_callback(platform_name, store_id, cookies, store_name)
|
||||
|
||||
@@ -1275,6 +1282,16 @@ class BackendClient:
|
||||
if self.disconnect_callback:
|
||||
self.disconnect_callback(disconnect_message)
|
||||
|
||||
def _handle_balance_insufficient(self, message: Dict[str, Any]):
|
||||
"""处理余额不足消息"""
|
||||
balance_message = message.get('content', '所有平台已断开。请充值条数后,重新连接')
|
||||
|
||||
self._log(f"⚠️ 余额不足: {balance_message}", "WARNING")
|
||||
|
||||
# 触发余额不足回调(在主线程中处理断开逻辑)
|
||||
if self.balance_insufficient_callback:
|
||||
self.balance_insufficient_callback(balance_message)
|
||||
|
||||
# ==================== 辅助方法 ====================
|
||||
|
||||
def set_token(self, token: str):
|
||||
|
||||
Reference in New Issue
Block a user