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

@@ -408,17 +408,36 @@ ChatManager="*res://_Core/managers/ChatManager.gd"
### 1. AuthManager 集成
**需求**: ChatManager 需要获取游戏 token
**需求**: ChatManager 需要获取 access_token 用于 WebSocket 聊天认证
**解决方案**: AuthManager 中添加方法
**解决方案**: AuthManager 在登录成功后自动提取并保存 access_token 和 refresh_token
**Token 管理架构**:
```gdscript
# AuthManager.gd - 添加此方法
func get_game_token() -> String:
# 返回登录时保存的 token
return _game_token if _game_token != null else ""
# 内存存储(快速访问)
var _access_token: String = "" # JWT访问令牌短期用于API和WebSocket
var _refresh_token: String = "" # JWT刷新令牌长期用于获取新access_token
var _user_info: Dictionary = {} # 用户信息
var _token_expiry: float = 0.0 # access_token过期时间Unix时间戳
# 本地存储ConfigFile持久化
const AUTH_CONFIG_PATH: String = "user://auth.cfg"
```
**注意事项**: 需要在 `/auth/login` 成功后保存 token 到 AuthManager
**登录流程**:
1. 用户登录成功后,服务器返回 `access_token``refresh_token`
2. AuthManager 调用 `_save_tokens_to_memory(data)` 保存到内存
3. AuthManager 调用 `_save_tokens_to_local(data)` 保存到本地ConfigFile
4. AuthScene 在登录成功后调用 `ChatManager.set_game_token(token)` 设置token
**Token 存储内容**:
- **内存**: access_token, refresh_token, user_info, token_expiry
- **本地 (user://auth.cfg)**: refresh_token, user_id, username, saved_at
**注意事项**:
- `access_token` 仅保存在内存中,不存储到本地(安全考虑)
- `refresh_token` 加密存储到本地用于下次登录时自动刷新token
- Token 过期后需要使用 refresh_token 刷新
### 2. EventSystem 集成
@@ -455,7 +474,8 @@ func _ready():
#### 1. 登录
```json
// 发送
{"type": "login", "token": "user_game_token"}
// token 字段应该使用登录接口返回的 access_token
{"type": "login", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}
// 成功响应
{"t": "login_success", "sessionId": "...", "currentMap": "...", "username": "..."}
@@ -464,6 +484,12 @@ func _ready():
{"t": "error", "code": "AUTH_FAILED", "message": "..."}
```
**Token 来源**:
- 登录接口 (`/auth/login`) 返回 `access_token` (JWT访问令牌
- AuthManager 在登录成功后保存 access_token 到内存
- AuthScene 在登录成功后设置 token 给 ChatManager
- ChatManager 使用该 token 发送 WebSocket 登录消息
#### 2. 发送聊天
```json
// 发送