feat:实现聊天系统核心功能

- 添加 SocketIOClient.gd 实现 Socket.IO 协议封装
- 添加 WebSocketManager.gd 管理连接生命周期和自动重连
- 添加 ChatManager.gd 实现聊天业务逻辑与会话管理
  - 支持当前会话缓存(最多 100 条消息)
  - 支持历史消息按需加载(每次 100 条)
  - 每次登录/重连自动重置会话缓存
  - 客户端频率限制(10 条/分钟)
  - Token 管理与认证
- 添加 ChatMessage.gd/tscn 消息气泡 UI 组件
- 添加 ChatUI.gd/tscn 聊天界面
- 在 EventNames.gd 添加 7 个聊天事件常量
- 在 AuthManager.gd 添加 game_token 管理方法
- 添加完整的单元测试(128 个测试用例)
  - test_socketio_client.gd (42 个测试)
  - test_websocket_manager.gd (38 个测试)
  - test_chat_manager.gd (48 个测试)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
王浩
2026-01-07 17:42:31 +08:00
parent e3c4d08021
commit fb7cba4088
22 changed files with 3734 additions and 1 deletions

View File

@@ -80,6 +80,9 @@ var current_email: String = ""
# 网络请求管理
var active_request_ids: Array = []
# 游戏 token 管理(用于 WebSocket 聊天认证)
var _game_token: String = ""
# ============ 生命周期方法 ============
# 初始化管理器
@@ -93,6 +96,31 @@ func cleanup():
NetworkManager.cancel_request(request_id)
active_request_ids.clear()
# ============ 游戏 Token 管理 ============
# 设置游戏 token
#
# 参数:
# token: String - 游戏认证 token
#
# 使用场景:
# - 登录成功后设置 token
# - 从服务器响应中获取 token
func set_game_token(token: String) -> void:
_game_token = token
print("AuthManager: 游戏 token 已设置")
# 获取游戏 token
#
# 返回值:
# String - 游戏 token如果未设置则返回空字符串
#
# 使用场景:
# - ChatManager 连接 WebSocket 时需要 token
# - 其他需要游戏认证的场景
func get_game_token() -> String:
return _game_token
# ============ 登录相关方法 ============
# 执行密码登录