143 lines
4.2 KiB
Python
143 lines
4.2 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
简化的访问模式实时更新功能测试
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
|
|
print("开始测试访问模式下的实时更新功能...")
|
|
|
|
try:
|
|
# 测试导入
|
|
print("正在导入模块...")
|
|
|
|
# 检查文件是否存在
|
|
if os.path.exists('TCPGameServer.py'):
|
|
print("✓ TCPGameServer.py 文件存在")
|
|
else:
|
|
print("❌ TCPGameServer.py 文件不存在")
|
|
sys.exit(1)
|
|
|
|
if os.path.exists('SMYMongoDBAPI.py'):
|
|
print("✓ SMYMongoDBAPI.py 文件存在")
|
|
else:
|
|
print("❌ SMYMongoDBAPI.py 文件不存在")
|
|
sys.exit(1)
|
|
|
|
# 尝试导入
|
|
from TCPGameServer import TCPGameServer
|
|
print("✓ 成功导入 TCPGameServer")
|
|
|
|
# 检查关键方法是否存在
|
|
server = TCPGameServer()
|
|
|
|
if hasattr(server, '_push_update_to_visitors'):
|
|
print("✓ _push_update_to_visitors 方法存在")
|
|
else:
|
|
print("❌ _push_update_to_visitors 方法不存在")
|
|
|
|
if hasattr(server, 'update_crops_growth'):
|
|
print("✓ update_crops_growth 方法存在")
|
|
else:
|
|
print("❌ update_crops_growth 方法不存在")
|
|
|
|
if hasattr(server, '_push_crop_update_to_player'):
|
|
print("✓ _push_crop_update_to_player 方法存在")
|
|
else:
|
|
print("❌ _push_crop_update_to_player 方法不存在")
|
|
|
|
print("\n=== 功能验证 ===")
|
|
|
|
# 模拟用户数据
|
|
server.user_data = {
|
|
"client_a": {
|
|
"logged_in": True,
|
|
"username": "user_a",
|
|
"visiting_mode": False,
|
|
"visiting_target": ""
|
|
},
|
|
"client_b": {
|
|
"logged_in": True,
|
|
"username": "user_b",
|
|
"visiting_mode": True,
|
|
"visiting_target": "user_a"
|
|
}
|
|
}
|
|
|
|
# 测试 update_crops_growth 方法是否能正确收集需要更新的玩家
|
|
print("测试作物生长更新逻辑...")
|
|
|
|
# 重写 load_player_data 方法以避免数据库依赖
|
|
def mock_load_player_data(username):
|
|
return {
|
|
"农场土地": [
|
|
{
|
|
"is_planted": True,
|
|
"crop_type": "番茄",
|
|
"grow_time": 300,
|
|
"max_grow_time": 600
|
|
}
|
|
]
|
|
}
|
|
|
|
def mock_save_player_data(username, data):
|
|
pass
|
|
|
|
def mock_update_player_crops(data, username):
|
|
return True
|
|
|
|
def mock_push_crop_update_to_player(username, data):
|
|
print(f" 推送作物更新给: {username}")
|
|
|
|
server.load_player_data = mock_load_player_data
|
|
server.save_player_data = mock_save_player_data
|
|
server.update_player_crops = mock_update_player_crops
|
|
server._push_crop_update_to_player = mock_push_crop_update_to_player
|
|
|
|
# 调用作物生长更新
|
|
print("调用 update_crops_growth...")
|
|
server.update_crops_growth()
|
|
|
|
print("\n=== 测试访问者推送功能 ===")
|
|
|
|
# 重写 send_data 方法
|
|
def mock_send_data(client_id, data):
|
|
print(f" 向 {client_id} 发送消息: {data.get('type', 'unknown')}")
|
|
if data.get('type') == 'crop_update':
|
|
print(f" - 是否访问模式: {data.get('is_visiting', False)}")
|
|
print(f" - 被访问玩家: {data.get('visited_player', 'N/A')}")
|
|
|
|
def mock_find_client_by_username(username):
|
|
if username == "user_a":
|
|
return "client_a"
|
|
return None
|
|
|
|
server.send_data = mock_send_data
|
|
server._find_client_by_username = mock_find_client_by_username
|
|
|
|
# 测试向访问者推送更新
|
|
target_player_data = {
|
|
"农场土地": [
|
|
{
|
|
"is_planted": True,
|
|
"crop_type": "番茄",
|
|
"grow_time": 400,
|
|
"max_grow_time": 600
|
|
}
|
|
]
|
|
}
|
|
|
|
print("调用 _push_update_to_visitors...")
|
|
server._push_update_to_visitors("user_a", target_player_data)
|
|
|
|
print("\n🎉 所有功能验证通过!访问模式下的实时更新功能已正确实现。")
|
|
|
|
except Exception as e:
|
|
print(f"❌ 测试过程中出现错误: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
sys.exit(1)
|
|
|
|
print("\n测试完成!") |