[patch] 新增用户余额不足 交互模式代码

This commit is contained in:
2025-10-17 17:38:02 +08:00
parent a5c2a44512
commit 8eb03ddedc
4 changed files with 225 additions and 77 deletions

View File

@@ -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):