合并主场景和个人小屋
This commit is contained in:
@@ -99,7 +99,7 @@ const CHAT_ERROR_MESSAGES: Dictionary = {
|
||||
# ============================================================================
|
||||
|
||||
# WebSocket 管理器
|
||||
var _websocket_manager: WebSocketManager
|
||||
var _websocket_manager: ChatWebSocketManager
|
||||
|
||||
# 是否已登录
|
||||
var _is_logged_in: bool = false
|
||||
@@ -132,10 +132,8 @@ var _pending_self_messages: Array[Dictionary] = []
|
||||
|
||||
# 初始化
|
||||
func _ready() -> void:
|
||||
print("ChatManager 初始化完成")
|
||||
|
||||
# 创建 WebSocket 管理器
|
||||
_websocket_manager = WebSocketManager.new()
|
||||
_websocket_manager = ChatWebSocketManager.new()
|
||||
add_child(_websocket_manager)
|
||||
|
||||
# 连接信号
|
||||
@@ -159,7 +157,6 @@ func _exit_tree() -> void:
|
||||
# ChatManager.set_game_token("your_game_token")
|
||||
func set_game_token(token: String) -> void:
|
||||
_game_token = token
|
||||
print("ChatManager: 游戏 token 已设置")
|
||||
|
||||
# 获取游戏 token
|
||||
#
|
||||
@@ -178,13 +175,10 @@ func connect_to_chat_server() -> void:
|
||||
push_warning("聊天服务器已连接")
|
||||
return
|
||||
|
||||
print("=== ChatManager 开始连接 ===")
|
||||
_websocket_manager.connect_to_game_server()
|
||||
|
||||
# 断开聊天服务器
|
||||
func disconnect_from_chat_server() -> void:
|
||||
print("=== ChatManager 断开连接 ===")
|
||||
|
||||
# 发送登出消息
|
||||
if _is_logged_in:
|
||||
var logout_data := {"type": "logout"}
|
||||
@@ -278,12 +272,9 @@ func send_chat_message(content: String, scope: String = "local") -> void:
|
||||
"is_self": true
|
||||
})
|
||||
|
||||
print("📤 发送聊天消息: ", content)
|
||||
|
||||
# 消息发送完成回调
|
||||
func _on_chat_message_sent(request_id: String, success: bool, data: Dictionary, error_info: Dictionary) -> void:
|
||||
func _on_chat_message_sent(_request_id: String, success: bool, data: Dictionary, error_info: Dictionary) -> void:
|
||||
if success:
|
||||
print("✅ 消息发送成功: ", data)
|
||||
var message_id: String = str(data.get("data", {}).get("id", ""))
|
||||
var timestamp: float = Time.get_unix_time_from_system()
|
||||
chat_message_sent.emit(message_id, timestamp)
|
||||
@@ -292,7 +283,6 @@ func _on_chat_message_sent(request_id: String, success: bool, data: Dictionary,
|
||||
"timestamp": timestamp
|
||||
})
|
||||
else:
|
||||
print("❌ 消息发送失败: ", error_info)
|
||||
_handle_error("SEND_FAILED", error_info.get("message", "发送失败"))
|
||||
|
||||
# 更新玩家位置
|
||||
@@ -319,8 +309,6 @@ func update_player_position(x: float, y: float, map_id: String) -> void:
|
||||
var json_string := JSON.stringify(position_data)
|
||||
_websocket_manager.send_message(json_string)
|
||||
|
||||
print("📍 更新位置: (%.2f, %.2f) in %s" % [x, y, map_id])
|
||||
|
||||
# ============================================================================
|
||||
# 公共 API - 频率限制
|
||||
# ============================================================================
|
||||
@@ -375,7 +363,6 @@ func get_message_history() -> Array[Dictionary]:
|
||||
# 清空消息历史
|
||||
func clear_message_history() -> void:
|
||||
_message_history.clear()
|
||||
print("🧹 清空消息历史")
|
||||
|
||||
# 重置当前会话(每次登录/重连时调用)
|
||||
#
|
||||
@@ -392,7 +379,6 @@ func reset_session() -> void:
|
||||
_history_loading = false
|
||||
_has_more_history = true
|
||||
_oldest_message_timestamp = 0.0
|
||||
print("🔄 重置聊天会话")
|
||||
|
||||
# 加载历史消息(按需从 Zulip 后端获取)
|
||||
#
|
||||
@@ -411,36 +397,26 @@ func reset_session() -> void:
|
||||
# 注意:
|
||||
# - 这是异步操作,需要通过 Zulip API 实现
|
||||
# - 当前实现为占位符,需要后端 API 支持
|
||||
func load_history(count: int = HISTORY_PAGE_SIZE) -> void:
|
||||
func load_history(_count: int = HISTORY_PAGE_SIZE) -> void:
|
||||
if _history_loading:
|
||||
print("⏳ 历史消息正在加载中...")
|
||||
return
|
||||
|
||||
if not _has_more_history:
|
||||
print("📚 没有更多历史消息")
|
||||
return
|
||||
|
||||
_history_loading = true
|
||||
print("📜 开始加载历史消息,数量: ", count)
|
||||
|
||||
# TODO: 实现从 Zulip 后端获取历史消息
|
||||
# NetworkManager.get_chat_history(_oldest_message_timestamp, count, _on_history_loaded)
|
||||
|
||||
# 临时实现:模拟历史消息加载(测试用)
|
||||
# await get_tree().create_timer(1.0).timeout
|
||||
# _on_history_loaded([])
|
||||
|
||||
# 历史消息加载完成回调
|
||||
func _on_history_loaded(messages: Array) -> void:
|
||||
_history_loading = false
|
||||
|
||||
if messages.is_empty():
|
||||
_has_more_history = false
|
||||
print("📚 没有更多历史消息")
|
||||
return
|
||||
|
||||
print("📜 历史消息加载完成,数量: ", messages.size())
|
||||
|
||||
# 将历史消息插入到当前会话历史开头
|
||||
for i in range(messages.size() - 1, -1, -1):
|
||||
var message: Dictionary = messages[i]
|
||||
@@ -477,8 +453,6 @@ func _connect_signals() -> void:
|
||||
|
||||
# 发送登录消息
|
||||
func _send_login_message() -> void:
|
||||
print("📤 发送登录消息...")
|
||||
|
||||
var login_data := {
|
||||
"type": "login",
|
||||
"token": _game_token
|
||||
@@ -486,14 +460,9 @@ func _send_login_message() -> void:
|
||||
|
||||
var json_string := JSON.stringify(login_data)
|
||||
_websocket_manager.send_message(json_string)
|
||||
|
||||
print(" Token: ", _game_token.left(20) + "..." if _game_token.length() > 20 else _game_token)
|
||||
|
||||
# 连接状态变化
|
||||
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)
|
||||
|
||||
@@ -517,7 +486,7 @@ func _on_data_received(message: String) -> void:
|
||||
var parse_result := json.parse(message)
|
||||
|
||||
if parse_result != OK:
|
||||
print("❌ ChatManager: JSON 解析失败 - ", message)
|
||||
push_error("ChatManager: JSON 解析失败")
|
||||
return
|
||||
|
||||
var data: Dictionary = json.data
|
||||
@@ -541,13 +510,10 @@ func _on_data_received(message: String) -> void:
|
||||
"position_updated":
|
||||
_handle_position_updated(data)
|
||||
_:
|
||||
print("⚠️ ChatManager: 未处理的消息类型 - ", message_type)
|
||||
print(" 消息内容: ", data)
|
||||
push_warning("ChatManager: 未处理的消息类型 %s" % message_type)
|
||||
|
||||
# 处理登录成功
|
||||
func _handle_login_success(data: Dictionary) -> void:
|
||||
print("✅ ChatManager: 登录成功")
|
||||
|
||||
_is_logged_in = true
|
||||
_current_username = data.get("username", "")
|
||||
_current_map = data.get("currentMap", "")
|
||||
@@ -555,9 +521,6 @@ func _handle_login_success(data: Dictionary) -> void:
|
||||
# 重置当前会话缓存(每次登录/重连都清空,重新开始接收消息)
|
||||
reset_session()
|
||||
|
||||
print(" 用户名: ", _current_username)
|
||||
print(" 地图: ", _current_map)
|
||||
|
||||
# 通过 EventSystem 广播(Signal Up)
|
||||
EventSystem.emit_event(EventNames.CHAT_LOGIN_SUCCESS, {
|
||||
"username": _current_username,
|
||||
@@ -568,8 +531,6 @@ func _handle_login_success(data: Dictionary) -> void:
|
||||
func _handle_login_error(data: Dictionary) -> void:
|
||||
var error_message: String = data.get("message", "登录失败")
|
||||
|
||||
print("❌ ChatManager: 登录失败 - ", error_message)
|
||||
|
||||
_is_logged_in = false
|
||||
|
||||
# 通过 EventSystem 广播错误(Signal Up)
|
||||
@@ -583,8 +544,6 @@ func _handle_chat_sent(data: Dictionary) -> void:
|
||||
var message_id: String = str(data.get("messageId", ""))
|
||||
var timestamp: float = data.get("timestamp", 0.0)
|
||||
|
||||
print("✅ 消息发送成功: ", message_id)
|
||||
|
||||
# 发射信号
|
||||
chat_message_sent.emit(message_id, timestamp)
|
||||
|
||||
@@ -598,8 +557,6 @@ func _handle_chat_sent(data: Dictionary) -> void:
|
||||
func _handle_chat_error(data: Dictionary) -> void:
|
||||
var error_message: String = data.get("message", "消息发送失败")
|
||||
|
||||
print("❌ ChatManager: 聊天错误 - ", error_message)
|
||||
|
||||
# 通过 EventSystem 广播错误(Signal Up)
|
||||
EventSystem.emit_event(EventNames.CHAT_ERROR_OCCURRED, {
|
||||
"error_code": "CHAT_SEND_FAILED",
|
||||
@@ -627,8 +584,6 @@ func _handle_chat_render(data: Dictionary) -> void:
|
||||
from_user = _current_username
|
||||
is_self = true
|
||||
|
||||
print("📨 收到聊天消息: ", from_user, " -> ", content)
|
||||
|
||||
# 添加到历史
|
||||
_add_message_to_history({
|
||||
"from_user": from_user,
|
||||
@@ -688,8 +643,6 @@ func _handle_position_updated(data: Dictionary) -> void:
|
||||
var stream: String = data.get("stream", "")
|
||||
var topic: String = data.get("topic", "")
|
||||
|
||||
print("✅ 位置更新成功: ", stream, " / ", topic)
|
||||
|
||||
# 发射信号
|
||||
chat_position_updated.emit(stream, topic)
|
||||
|
||||
@@ -716,7 +669,7 @@ func _on_socket_error(error: String) -> void:
|
||||
|
||||
# 处理错误
|
||||
func _handle_error(error_code: String, error_message: String) -> void:
|
||||
print("❌ ChatManager 错误: [", error_code, "] ", error_message)
|
||||
push_error("ChatManager: [%s] %s" % [error_code, error_message])
|
||||
|
||||
# 获取用户友好的错误消息
|
||||
var user_message: String = CHAT_ERROR_MESSAGES.get(error_code, error_message) as String
|
||||
|
||||
Reference in New Issue
Block a user