_TheStrongestSnail/TheStrongestSnail/Assets/Scripts/Login/11/QueryRoomdetails512.cs
wulongxiao 2c61dc24b5 jiekou
2024-11-14 18:25:21 +08:00

917 lines
29 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Threading.Tasks;
using Newtonsoft.Json;
using UnityEngine.UI;
/*public class QueryRoomdetails512 : MonoBehaviour
{
public string token = null; // 保存最新的 token初始为 null
public int escapeId = -1; // 保存最新的 escapeId初始为 -1 表示未设置
void Start()
{
// 注册监听事件,当收到 token 时,触发 HandleTokenReceived
LoginAndGetToken.OnTokenReceived += HandleTokenReceived;
// 注册监听,当 escapeId 更新时调用 HandleGameEscapeIdUpdated但不执行其他方法
selectLatest511.OnGameEscapeIdUpdated += HandleGameEscapeIdUpdated;
}
// 当接收到 token 时触发此方法,仅保存 token
public void HandleTokenReceived(string receivedToken)
{
token = receivedToken; // 保存最新的 token
// 首次调用加载初始数据
LoadInitialData();
//LoadGameEscapeData();
//Debug.Log("接收到新的 token: " + token);
}
// 当游戏逃亡 ID 更新时触发此方法,仅保存最新的 escapeId
public async void HandleGameEscapeIdUpdated(int newGameEscapeId)
{
escapeId = newGameEscapeId; // 保存最新的 escapeId
await QueryEscapeRoomDetails();//=====================================================================放在这里仅因为懒得写触发条件可以放在任何地方比如input.GetKeyDown.....必须改掉,吃服务器
//Debug.Log("接收到新的 GameEscapeId: " + escapeId);
}
// 加载初始数据,使用最新的 token
public async void LoadInitialData()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法加载初始数据token 未设置。");
return;
}
await QueryEscapeRoomDetails();//=====================================================================放在此处只为解除一个黄色报错,看着闹心。但可以不要
}
// 加载游戏逃亡数据,使用最新的 escapeId 和 token
public async void selectQueryKill1()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法加载游戏逃亡数据token 未设置。");
return;
}
if (escapeId == -1)
{
Debug.LogWarning("无法加载游戏逃亡数据escapeId 未设置。");
return;
}
await QueryEscapeRoomDetails();//==========================================================================================================================================================================
}
//===============================================================================================================================================================================================================================
// 查询逃亡房间详情
public async Task QueryEscapeRoomDetails()
{
var headers = CreateHeaders();
string body = $@"
{{
""userId"": 106,
""escapeId"": {escapeId}
}}";
string response = await web.SendRequest("http://121.40.42.41:8080/snail/LatestGame511/queryEscapeRoomList", "POST", body, headers);
Debug.Log("逃亡房间详情响应: " + response);
}
//===============================================================================================================================================================================================================================
// 创建请求头,使用最新的 token
public Dictionary<string, string> CreateHeaders()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("尝试创建请求头时token 未设置。");
return new Dictionary<string, string>();
}
return new Dictionary<string, string>
{
{ "Authorization", token }
};
}
void OnDestroy()
{
// 注销监听事件,避免内存泄漏
LoginAndGetToken.OnTokenReceived -= HandleTokenReceived;
selectLatest511.OnGameEscapeIdUpdated -= HandleGameEscapeIdUpdated;
}
}*/
//字符串版
/*public class QueryRoomdetails512 : MonoBehaviour
{
public string token = null; // 保存最新的 token初始为 null
public int escapeId = -1; // 保存最新的 escapeId初始为 -1 表示未设置
private string lastEscapeRoomResponse = null; // 保存最新的逃亡房间查询响应
// 假设有一个手动查询逃亡房间详情的按钮===================================================================================
public Button queryEscapeRoomButton;
void Start()
{
// 注册监听事件,当收到 token 时,触发 HandleTokenReceived
LoginAndGetToken.OnTokenReceived += HandleTokenReceived;
// 注册监听,当 escapeId 更新时调用 HandleGameEscapeIdUpdated
selectLatest511.OnGameEscapeIdUpdated += HandleGameEscapeIdUpdated;
// 假设按钮被点击时调用 OnQueryEscapeRoomButtonClicked================================================================
if (queryEscapeRoomButton != null)
{
queryEscapeRoomButton.onClick.AddListener(OnQueryEscapeRoomButtonClicked);
}
}
// 当接收到 token 时触发此方法,仅保存 token
public void HandleTokenReceived(string receivedToken)
{
token = receivedToken; // 保存最新的 token
Debug.Log("接收到新的 token: " + token);
// 首次调用加载初始数据
LoadInitialData();
}
// 当游戏逃亡 ID 更新时触发此方法,仅保存最新的 escapeId
public async void HandleGameEscapeIdUpdated(int newGameEscapeId)
{
escapeId = newGameEscapeId; // 保存最新的 escapeId
Debug.Log("接收到新的 GameEscapeId: " + escapeId);
// 在接收到 escapeId 更新时自动调用查询逃亡房间详情
lastEscapeRoomResponse = await QueryEscapeRoomDetails();
Debug.Log("HandleGameEscapeIdUpdated 处理的查询逃亡房间响应: " + lastEscapeRoomResponse);
}
// 加载初始数据,使用最新的 token
public async void LoadInitialData()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法加载初始数据token 未设置。");
return;
}
// 调用查询逃亡房间详情方法
lastEscapeRoomResponse = await QueryEscapeRoomDetails();
Debug.Log("初始加载的查询逃亡房间详情响应: " + lastEscapeRoomResponse);
}
// 按钮点击后触发逃亡房间详情查询操作
public async void OnQueryEscapeRoomButtonClicked()
{
// 检查 token 和 escapeId 是否已正确设置
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法查询逃亡房间详情token 未设置。");
return;
}
if (escapeId == -1)
{
Debug.LogWarning("无法查询逃亡房间详情escapeId 未设置。");
return;
}
// 调用查询逃亡房间详情方法
lastEscapeRoomResponse = await QueryEscapeRoomDetails();
Debug.Log("用户按钮触发的查询逃亡房间详情响应: " + lastEscapeRoomResponse);
// 根据响应做进一步的处理
HandleEscapeRoomResponse(lastEscapeRoomResponse);
}
// 查询逃亡房间详情
public async Task<string> QueryEscapeRoomDetails()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法查询逃亡房间详情token 未设置。");
return null;
}
if (escapeId == -1)
{
Debug.LogWarning("无法查询逃亡房间详情escapeId 未设置。");
return null;
}
var headers = CreateHeaders();
string body = $@"
{{
""userId"": 106,
""escapeId"": {escapeId}
}}";
Debug.Log("正在查询逃亡房间详情...");
string response = await web.SendRequest("http://121.40.42.41:8080/snail/LatestGame511/queryEscapeRoomList", "POST", body, headers);
Debug.Log("查询逃亡房间详情响应: " + response);
return response; // 返回响应
}
// 创建请求头,使用最新的 token
public Dictionary<string, string> CreateHeaders()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("尝试创建请求头时token 未设置。");
return new Dictionary<string, string>();
}
return new Dictionary<string, string>
{
{ "Authorization", token }
};
}
// 处理 QueryEscapeRoomDetails 方法的响应
private void HandleEscapeRoomResponse(string response)
{
if (response.Contains("success"))
{
Debug.Log("查询逃亡房间详情成功!");
}
else
{
Debug.LogWarning("查询逃亡房间详情失败,服务器响应: " + response);
}
}
void OnDestroy()
{
// 注销监听事件,避免内存泄漏
LoginAndGetToken.OnTokenReceived -= HandleTokenReceived;
selectLatest511.OnGameEscapeIdUpdated -= HandleGameEscapeIdUpdated;
// 取消按钮的点击监听================================================================================================
if (queryEscapeRoomButton != null)
{
queryEscapeRoomButton.onClick.RemoveListener(OnQueryEscapeRoomButtonClicked);
}
}
}*/
//解析版
/*public class QueryRoomdetails512 : MonoBehaviour
{
public string token = null; // 保存最新的 token初始为 null
public int escapeId = -1; // 保存最新的 escapeId初始为 -1 表示未设置
private string lastEscapeRoomResponse = null; // 保存最新的逃亡房间查询响应
// 假设有一个手动查询逃亡房间详情的按钮
public Button queryEscapeRoomButton;
void Start()
{
// 注册监听事件,当收到 token 时,触发 HandleTokenReceived
LoginAndGetToken.OnTokenReceived += HandleTokenReceived;
// 注册监听,当 escapeId 更新时调用 HandleGameEscapeIdUpdated
selectLatest511.OnGameEscapeIdUpdated += HandleGameEscapeIdUpdated;
// 假设按钮被点击时调用 OnQueryEscapeRoomButtonClicked
if (queryEscapeRoomButton != null)
{
queryEscapeRoomButton.onClick.AddListener(OnQueryEscapeRoomButtonClicked);
}
}
// 当接收到 token 时触发此方法,仅保存 token
public void HandleTokenReceived(string receivedToken)
{
token = receivedToken; // 保存最新的 token
Debug.Log("接收到新的 token: " + token);
// 首次调用加载初始数据
LoadInitialData();
}
// 当游戏逃亡 ID 更新时触发此方法,仅保存最新的 escapeId
public async void HandleGameEscapeIdUpdated(int newGameEscapeId)
{
escapeId = newGameEscapeId; // 保存最新的 escapeId
Debug.Log("接收到新的 GameEscapeId: " + escapeId);
// 在接收到 escapeId 更新时自动调用查询逃亡房间详情
lastEscapeRoomResponse = await QueryEscapeRoomDetails();
Debug.Log("HandleGameEscapeIdUpdated 处理的查询逃亡房间响应: " + lastEscapeRoomResponse);
}
// 加载初始数据,使用最新的 token
public async void LoadInitialData()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法加载初始数据token 未设置。");
return;
}
// 调用查询逃亡房间详情方法
lastEscapeRoomResponse = await QueryEscapeRoomDetails();
Debug.Log("初始加载的查询逃亡房间详情响应: " + lastEscapeRoomResponse);
}
// 按钮点击后触发逃亡房间详情查询操作
public async void OnQueryEscapeRoomButtonClicked()
{
// 检查 token 和 escapeId 是否已正确设置
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法查询逃亡房间详情token 未设置。");
return;
}
if (escapeId == -1)
{
Debug.LogWarning("无法查询逃亡房间详情escapeId 未设置。");
return;
}
// 调用查询逃亡房间详情方法
lastEscapeRoomResponse = await QueryEscapeRoomDetails();
Debug.Log("用户按钮触发的查询逃亡房间详情响应: " + lastEscapeRoomResponse);
// 根据响应做进一步的处理
HandleEscapeRoomResponse(lastEscapeRoomResponse);
}
// 查询逃亡房间详情
public async Task<string> QueryEscapeRoomDetails()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法查询逃亡房间详情token 未设置。");
return null;
}
if (escapeId == -1)
{
Debug.LogWarning("无法查询逃亡房间详情escapeId 未设置。");
return null;
}
var headers = CreateHeaders();
string body = $@"
{{
""userId"": 106,
""escapeId"": {escapeId}
}}";
Debug.Log("正在查询逃亡房间详情...");
string response = await web.SendRequest("http://121.40.42.41:8080/snail/LatestGame511/queryEscapeRoomList", "POST", body, headers);
Debug.Log("查询逃亡房间详情响应: " + response);
// 反序列化 JSON 数据为 ServerResponse 对象
ServerResponse serverResponse = JsonConvert.DeserializeObject<ServerResponse>(response);
if (serverResponse != null && serverResponse.code == 200)
{
// 保存反序列化后的房间详情数据
if (serverResponse.data != null && serverResponse.data.gameEscapeRoomResponseVoList != null)
{
foreach (var room in serverResponse.data.gameEscapeRoomResponseVoList)
{
Debug.Log($"Escape ID: {room.escapeId}, Room No: {room.roomNo}, Room Beans Coin: {room.roomBeansCoin}");
}
}
}
else
{
Debug.LogWarning("解析失败或响应错误:" + response);
}
return response; // 返回响应
}
// 创建请求头,使用最新的 token
public Dictionary<string, string> CreateHeaders()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("尝试创建请求头时token 未设置。");
return new Dictionary<string, string>();
}
return new Dictionary<string, string>
{
{ "Authorization", token }
};
}
// 处理 QueryEscapeRoomDetails 方法的响应
private void HandleEscapeRoomResponse(string response)
{
ServerResponse serverResponse = JsonConvert.DeserializeObject<ServerResponse>(response);
if (serverResponse != null && serverResponse.code == 200)
{
Debug.Log("查询逃亡房间详情成功!");
if (serverResponse.data != null && serverResponse.data.gameEscapeRoomResponseVoList != null)
{
foreach (var room in serverResponse.data.gameEscapeRoomResponseVoList)
{
Debug.Log($"Escape ID: {room.escapeId}, Room No: {room.roomNo}, Room Beans Coin: {room.roomBeansCoin}");
}
}
}
else
{
Debug.LogWarning("查询逃亡房间详情失败,服务器响应: " + response);
}
}
void OnDestroy()
{
// 注销监听事件,避免内存泄漏
LoginAndGetToken.OnTokenReceived -= HandleTokenReceived;
selectLatest511.OnGameEscapeIdUpdated -= HandleGameEscapeIdUpdated;
// 取消按钮的点击监听
if (queryEscapeRoomButton != null)
{
queryEscapeRoomButton.onClick.RemoveListener(OnQueryEscapeRoomButtonClicked);
}
}
// 数据类
[Serializable]
public class GameEscapeRoomResponseVo
{
public int escapeId; // 游戏的ID
public int roomNo; // 房间编号
public float roomBeansCoin; // 房间下注欢乐豆
}
[Serializable]
public class Data
{
public List<GameEscapeRoomResponseVo> gameEscapeRoomResponseVoList; // 房间列表
}
[Serializable]
public class ServerResponse
{
public int code; // 响应状态码
public string message; // 提示语
public Data data; // 数据对象
}
}*/
//解析+高频版
/*public class QueryRoomdetails512 : MonoBehaviour
{
public string token = null; // 保存最新的 token初始为 null
public int escapeId = -1; // 保存最新的 escapeId初始为 -1 表示未设置
public int userId;
public string lastEscapeRoomResponse = null; // 保存最新的逃亡房间查询响应
// 假设有一个手动查询逃亡房间详情的按钮
//public Button queryEscapeRoomButton;
private Coroutine queryCoroutine; // 用于保存协程引用
void Start()
{
// 注册监听事件,当收到 token 时,触发 HandleTokenReceived
LoginAndGetToken.OnTokenReceived += HandleTokenReceived;
// 注册监听,当 escapeId 更新时调用 HandleGameEscapeIdUpdated
selectLatest511.OnGameEscapeIdUpdated += HandleGameEscapeIdUpdated;
//// 假设按钮被点击时调用 OnQueryEscapeRoomButtonClicked
//if (queryEscapeRoomButton != null)
//{
// queryEscapeRoomButton.onClick.AddListener(OnQueryEscapeRoomButtonClicked);
//}
// 启动协程,每两秒查询一次
queryCoroutine = StartCoroutine(QueryEscapeRoomRoutine());
}
// 当接收到 token 时触发此方法,仅保存 token
public void HandleTokenReceived(string receivedToken)
{
token = receivedToken; // 保存最新的 token
Debug.Log("接收到新的 token: " + token);
// 首次调用加载初始数据
LoadInitialData();
}
// 当游戏逃亡 ID 更新时触发此方法,仅保存最新的 escapeId
public async void HandleGameEscapeIdUpdated(int newGameEscapeId)
{
escapeId = newGameEscapeId; // 保存最新的 escapeId
Debug.Log("接收到新的 GameEscapeId: " + escapeId);
// 在接收到 escapeId 更新时自动调用查询逃亡房间详情
lastEscapeRoomResponse = await QueryEscapeRoomDetails();
Debug.Log("HandleGameEscapeIdUpdated 处理的查询逃亡房间响应: " + lastEscapeRoomResponse);
}
// 加载初始数据,使用最新的 token
public async void LoadInitialData()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法加载初始数据token 未设置。");
return;
}
// 调用查询逃亡房间详情方法
lastEscapeRoomResponse = await QueryEscapeRoomDetails();
Debug.Log("初始加载的查询逃亡房间详情响应: " + lastEscapeRoomResponse);
}
// 按钮点击后触发逃亡房间详情查询操作
public async void OnQueryEscapeRoomButtonClicked()
{
// 检查 token 和 escapeId 是否已正确设置
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法查询逃亡房间详情token 未设置。");
return;
}
if (escapeId == -1)
{
Debug.LogWarning("无法查询逃亡房间详情escapeId 未设置。");
return;
}
// 调用查询逃亡房间详情方法
lastEscapeRoomResponse = await QueryEscapeRoomDetails();
Debug.Log("用户按钮触发的查询逃亡房间详情响应: " + lastEscapeRoomResponse);
// 根据响应做进一步的处理
HandleEscapeRoomResponse(lastEscapeRoomResponse);
}
// 查询逃亡房间详情
public async Task<string> QueryEscapeRoomDetails()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法查询逃亡房间详情token 未设置。");
return null;
}
if (escapeId == -1)
{
Debug.LogWarning("无法查询逃亡房间详情escapeId 未设置。");
return null;
}
var headers = CreateHeaders();
string body = $@"
{{
""userId"": {userId},
""escapeId"": {escapeId}
}}";
Debug.Log("正在查询逃亡房间详情...");
string response = await web.SendRequest("http://121.40.42.41:8080/snail/LatestGame511/queryEscapeRoomList", "POST", body, headers);
Debug.Log("查询逃亡房间详情响应: " + response);
// 反序列化 JSON 数据为 ServerResponse 对象
ServerResponse serverResponse = JsonConvert.DeserializeObject<ServerResponse>(response);
if (serverResponse != null && serverResponse.code == 200)
{
// 保存反序列化后的房间详情数据
if (serverResponse.data != null && serverResponse.data.gameEscapeRoomResponseVoList != null)
{
foreach (var room in serverResponse.data.gameEscapeRoomResponseVoList)
{
Debug.Log($"Escape ID: {room.escapeId}, Room No: {room.roomNo}, Room Beans Coin: {room.roomBeansCoin}");
}
}
}
else
{
Debug.LogWarning("解析失败或响应错误:" + response);
}
return response; // 返回响应
}
// 创建请求头,使用最新的 token
public Dictionary<string, string> CreateHeaders()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("尝试创建请求头时token 未设置。");
return new Dictionary<string, string>();
}
return new Dictionary<string, string>
{
{ "Authorization", token }
};
}
// 处理 QueryEscapeRoomDetails 方法的响应
private void HandleEscapeRoomResponse(string response)
{
ServerResponse serverResponse = JsonConvert.DeserializeObject<ServerResponse>(response);
if (serverResponse != null && serverResponse.code == 200)
{
Debug.Log("查询逃亡房间详情成功!");
if (serverResponse.data != null && serverResponse.data.gameEscapeRoomResponseVoList != null)
{
foreach (var room in serverResponse.data.gameEscapeRoomResponseVoList)
{
Debug.Log($"Escape ID: {room.escapeId}, Room No: {room.roomNo}, Room Beans Coin: {room.roomBeansCoin}");
}
}
}
else
{
Debug.LogWarning("查询逃亡房间详情失败,服务器响应: " + response);
}
}
// 每两秒查询一次逃亡房间详情的协程
private IEnumerator QueryEscapeRoomRoutine()
{
while (true)
{
// 每两秒检查并查询逃亡房间详情
if (!string.IsNullOrEmpty(token) && escapeId != -1)
{
yield return QueryEscapeRoomDetails();
}
yield return new WaitForSeconds(2f); // 每两秒执行一次
}
}
void OnDestroy()
{
// 注销监听事件,避免内存泄漏
LoginAndGetToken.OnTokenReceived -= HandleTokenReceived;
selectLatest511.OnGameEscapeIdUpdated -= HandleGameEscapeIdUpdated;
//// 取消按钮的点击监听
//if (queryEscapeRoomButton != null)
//{
// queryEscapeRoomButton.onClick.RemoveListener(OnQueryEscapeRoomButtonClicked);
//}
// 停止查询协程,防止内存泄漏
if (queryCoroutine != null)
{
StopCoroutine(queryCoroutine);
}
}
// 数据类
[Serializable]
public class GameEscapeRoomResponseVo
{
public int escapeId; // 游戏的ID
public int roomNo; // 房间编号
public float roomBeansCoin; // 房间下注欢乐豆
}
[Serializable]
public class Data
{
public List<GameEscapeRoomResponseVo> gameEscapeRoomResponseVoList; // 房间列表
}
[Serializable]
public class ServerResponse
{
public int code; // 响应状态码
public string message; // 提示语
public Data data; // 数据对象
}
}*/
//解析+高频+单例
public class QueryRoomdetails512 : MonoBehaviour
{
// 单例实例
public static QueryRoomdetails512 Instance { get; private set; }
// 逃亡房间详情变量
public int latestEscapeId; // 最新的 escapeId
public int latestRoomNo; // 最新的房间编号
public float latestRoomBeansCoin; // 最新的房间下注欢乐豆
public string token = null; // 保存最新的 token初始为 null
public int escapeId = -1; // 保存最新的 escapeId初始为 -1 表示未设置
public int userId;
public string lastEscapeRoomResponse = null; // 保存最新的逃亡房间查询响应
private Coroutine queryCoroutine; // 用于保存协程引用
void Awake()
{
// 实现单例模式
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject); // 保证场景切换时不销毁这个对象
}
else
{
Destroy(gameObject); // 确保只有一个实例
}
}
void Start()
{
// 注册监听事件,当收到 token 时,触发 HandleTokenReceived
LoginAndGetToken.OnTokenReceived += HandleTokenReceived;
// 注册监听,当 escapeId 更新时调用 HandleGameEscapeIdUpdated
selectLatest511.OnGameEscapeIdUpdated += HandleGameEscapeIdUpdated;
// 启动协程,每两秒查询一次
queryCoroutine = StartCoroutine(QueryEscapeRoomRoutine());
}
// 当接收到 token 时触发此方法,仅保存 token
public void HandleTokenReceived(string receivedToken)
{
token = receivedToken; // 保存最新的 token
Debug.Log("接收到新的 token: " + token);
// 首次调用加载初始数据
LoadInitialData();
}
// 当游戏逃亡 ID 更新时触发此方法,仅保存最新的 escapeId
public async void HandleGameEscapeIdUpdated(int newGameEscapeId)
{
escapeId = newGameEscapeId; // 保存最新的 escapeId
// Debug.Log("接收到新的 GameEscapeId: " + escapeId);
// 在接收到 escapeId 更新时自动调用查询逃亡房间详情
lastEscapeRoomResponse = await QueryEscapeRoomDetails();
// Debug.Log("HandleGameEscapeIdUpdated 处理的查询逃亡房间响应: " + lastEscapeRoomResponse);
}
// 加载初始数据,使用最新的 token
public async void LoadInitialData()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法加载初始数据token 未设置。");
return;
}
// 调用查询逃亡房间详情方法
lastEscapeRoomResponse = await QueryEscapeRoomDetails();
// Debug.Log("初始加载的查询逃亡房间详情响应: " + lastEscapeRoomResponse);
}
// 查询逃亡房间详情
public async Task<string> QueryEscapeRoomDetails()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法查询逃亡房间详情token 未设置。");
return null;
}
if (escapeId == -1)
{
Debug.LogWarning("无法查询逃亡房间详情escapeId 未设置。");
return null;
}
var headers = CreateHeaders();
string body = $@"
{{
""userId"": {userId},
""escapeId"": {escapeId}
}}";
// Debug.Log("正在查询逃亡房间详情...");
string response = await web.SendRequest("http://121.40.42.41:8080/snail/LatestGame511/queryEscapeRoomList", "POST", body, headers);
Debug.Log("5.1.2查询逃亡房间详情响应: " + response);
// 反序列化 JSON 数据为 ServerResponse 对象并处理响应
HandleEscapeRoomResponse(response);
return response; // 返回响应
}
// 创建请求头,使用最新的 token
public Dictionary<string, string> CreateHeaders()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("尝试创建请求头时token 未设置。");
return new Dictionary<string, string>();
}
return new Dictionary<string, string>
{
{ "Authorization", token }
};
}
// 处理 QueryEscapeRoomDetails 方法的响应
private void HandleEscapeRoomResponse(string response)
{
ServerResponse serverResponse = JsonConvert.DeserializeObject<ServerResponse>(response);
if (serverResponse != null && serverResponse.code == 200)
{
Debug.Log("查询逃亡房间详情成功!");
if (serverResponse.data != null && serverResponse.data.gameEscapeRoomResponseVoList != null)
{
// 保存第一个房间的详情==============================================================================仅第一===========================================================
var room = serverResponse.data.gameEscapeRoomResponseVoList[0];
latestEscapeId = room.escapeId;
latestRoomNo = room.roomNo;
latestRoomBeansCoin = room.roomBeansCoin;
foreach (var roomDetail in serverResponse.data.gameEscapeRoomResponseVoList)
{
Debug.Log($"Escape ID: {roomDetail.escapeId}, Room No: {roomDetail.roomNo}, Room Beans Coin: {roomDetail.roomBeansCoin}");
}
}
}
else
{
Debug.LogWarning("查询逃亡房间详情失败,服务器响应: " + response);
}
}
// 每两秒查询一次逃亡房间详情的协程
private IEnumerator QueryEscapeRoomRoutine()
{
while (true)
{
// 每两秒检查并查询逃亡房间详情
if (!string.IsNullOrEmpty(token) && escapeId != -1)
{
yield return QueryEscapeRoomDetails();
}
yield return new WaitForSeconds(2f); // 每两秒执行一次
}
}
void OnDestroy()
{
// 注销监听事件,避免内存泄漏
LoginAndGetToken.OnTokenReceived -= HandleTokenReceived;
selectLatest511.OnGameEscapeIdUpdated -= HandleGameEscapeIdUpdated;
// 停止查询协程,防止内存泄漏
if (queryCoroutine != null)
{
StopCoroutine(queryCoroutine);
}
}
// 数据类
[Serializable]
public class GameEscapeRoomResponseVo
{
public int escapeId; // 游戏的ID
public int roomNo; // 房间编号
public float roomBeansCoin; // 房间下注欢乐豆
}
[Serializable]
public class Data
{
public List<GameEscapeRoomResponseVo> gameEscapeRoomResponseVoList; // 房间列表
}
[Serializable]
public class ServerResponse
{
public int code; // 响应状态码
public string message; // 提示语
public Data data; // 数据对象
}
}
//单例使用示例
//public class AnotherClass : MonoBehaviour
//{
// void Start()
// {
// // 通过 Singleton 实例访问数据
// int escapeId = QueryRoomdetails512.Instance.latestEscapeId;
// int roomNo = QueryRoomdetails512.Instance.latestRoomNo;
// float roomBeansCoin = QueryRoomdetails512.Instance.latestRoomBeansCoin;
// Debug.Log($"Latest Escape ID: {escapeId}, Room No: {roomNo}, Room Beans Coin: {roomBeansCoin}");
// }
//}