fix: 修复聊天系统编译错误

- 修复 WebSocketManager/SocketIOClient 函数缩进错误
- 重命名 is_connected() 避免与 Object 基类冲突
- 修复 tscn 文件多余前导空格
- 修复测试文件 GUT 断言函数调用
- 添加 GUT 测试框架
This commit is contained in:
WhaleTown Developer
2026-01-08 00:11:12 +08:00
parent 16f24ab26f
commit c8e73bec59
255 changed files with 21876 additions and 91 deletions

View File

@@ -23,8 +23,6 @@ extends Node
# - 所有聊天事件通过 EventSystem 广播
# ============================================================================
class_name ChatManager
# ============================================================================
# 信号定义 (Signal Up)
# ============================================================================
@@ -51,8 +49,8 @@ signal chat_error_occurred(error_code: String, message: String)
# 聊天连接状态变化信号
# 参数:
# state: WebSocketManager.ConnectionState - 连接状态
signal chat_connection_state_changed(state: WebSocketManager.ConnectionState)
# state: int - 连接状态0=DISCONNECTED, 1=CONNECTING, 2=CONNECTED, 3=RECONNECTING, 4=ERROR
signal chat_connection_state_changed(state: int)
# 位置更新成功信号
# 参数:
@@ -178,7 +176,7 @@ func get_game_token() -> String:
# 连接到聊天服务器
func connect_to_chat_server() -> void:
if _websocket_manager.is_connected():
if _websocket_manager.is_websocket_connected():
push_warning("聊天服务器已连接")
return
@@ -193,17 +191,17 @@ func disconnect_from_chat_server() -> void:
if _is_logged_in:
var logout_data := {"type": "logout"}
_socket_client.emit("logout", logout_data)
_is_logged_in = False
_is_logged_in = false
# 断开连接
_websocket_manager.disconnect()
_websocket_manager.disconnect_websocket()
# 检查是否已连接
#
# 返回值:
# bool - 是否已连接
func is_connected() -> bool:
return _websocket_manager.is_connected()
func is_chat_connected() -> bool:
return _websocket_manager.is_websocket_connected()
# ============================================================================
# 公共 API - 聊天操作
@@ -219,7 +217,7 @@ func is_connected() -> bool:
# ChatManager.send_chat_message("Hello, world!", "local")
func send_chat_message(content: String, scope: String = "local") -> void:
# 检查连接状态
if not _websocket_manager.is_connected():
if not _websocket_manager.is_websocket_connected():
_handle_error("NOT_CONNECTED", "未连接到聊天服务器")
return
@@ -272,7 +270,7 @@ func send_chat_message(content: String, scope: String = "local") -> void:
# 使用示例:
# ChatManager.update_player_position(150.0, 200.0, "novice_village")
func update_player_position(x: float, y: float, map_id: String) -> void:
if not _websocket_manager.is_connected():
if not _websocket_manager.is_websocket_connected():
return
var position_data := {
@@ -297,10 +295,9 @@ func can_send_message() -> bool:
var current_time := Time.get_unix_time_from_system()
# 清理过期的时间戳
_message_timestamps = _message_timestamps.filter(
func(timestamp: float) -> bool:
return current_time - timestamp < RATE_LIMIT_WINDOW
)
var filter_func := func(timestamp: float) -> bool:
return current_time - timestamp < RATE_LIMIT_WINDOW
_message_timestamps = _message_timestamps.filter(filter_func)
# 检查数量
return _message_timestamps.size() < RATE_LIMIT_MESSAGES
@@ -458,11 +455,12 @@ func _on_socket_connected() -> void:
# Socket 连接断开
func _on_socket_disconnected(_clean_close: bool) -> void:
print("🔌 ChatManager: Socket 连接断开")
_is_logged_in = False
_is_logged_in = false
# 连接状态变化
func _on_connection_state_changed(state: WebSocketManager.ConnectionState) -> void:
print("📡 ChatManager: 连接状态变化 - ", WebSocketManager.ConnectionState.keys()[state])
func _on_connection_state_changed(state: int) -> void:
var state_names := ["DISCONNECTED", "CONNECTING", "CONNECTED", "RECONNECTING", "ERROR"]
print("📡 ChatManager: 连接状态变化 - ", state_names[state])
# 发射信号
chat_connection_state_changed.emit(state)
@@ -496,7 +494,7 @@ func _on_socket_event_received(event_name: String, data: Dictionary) -> void:
func _handle_login_success(data: Dictionary) -> void:
print("✅ ChatManager: 登录成功")
_is_logged_in = True
_is_logged_in = true
_current_username = data.get("username", "")
_current_map = data.get("currentMap", "")
@@ -590,8 +588,8 @@ func _on_socket_error(error: String) -> void:
# 发送登录消息
func _send_login_message() -> void:
if _game_token.is_empty():
push_error("无法获取游戏 token请先调用 set_game_token() 设置 token")
_handle_error("AUTH_FAILED", "无法获取游戏 token请先设置 token")
push_error("无法获取 access token请确保已登录")
_handle_error("AUTH_FAILED", "无法获取 access token请先登录")
return
var login_data := {
@@ -600,14 +598,14 @@ func _send_login_message() -> void:
}
_socket_client.emit("login", login_data)
print("📤 发送登录消息")
print("📤 发送登录消息(使用 access token")
# 处理错误
func _handle_error(error_code: String, error_message: String) -> void:
print("❌ ChatManager 错误: [", error_code, "] ", error_message)
# 获取用户友好的错误消息
var user_message := CHAT_ERROR_MESSAGES.get(error_code, error_message)
var user_message: String = CHAT_ERROR_MESSAGES.get(error_code, error_message) as String
# 发射信号
chat_error_occurred.emit(error_code, user_message)
@@ -620,7 +618,7 @@ func _handle_error(error_code: String, error_message: String) -> void:
# 特殊处理认证失败
if error_code == "AUTH_FAILED" or error_code == "SESSION_EXPIRED":
_is_logged_in = False
_is_logged_in = false
EventSystem.emit_event(EventNames.CHAT_LOGIN_FAILED, {
"error_code": error_code
})
@@ -633,11 +631,11 @@ func _record_message_timestamp() -> void:
# 添加消息到当前会话历史
func _add_message_to_history(message: Dictionary) -> void:
_message_history.append(message)
# 更新最旧消息时间戳(用于历史消息加载)
if _oldest_message_timestamp == 0.0 or message.timestamp < _oldest_message_timestamp:
_oldest_message_timestamp = message.timestamp
# 限制当前会话消息数量(超过后删除最旧的)
if _message_history.size() > MAX_SESSION_MESSAGES:
_message_history.pop_front()