using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using Newtonsoft.Json; using System.Threading.Tasks; public class selectGameEscape512 : MonoBehaviour { private int gameEscapeId; // 定义一个事件,当 gameEscapeId 被更新时触发 public static event Action OnGameEscapeIdUpdated; void Start() { // 由于除登录注册外的其他方法,都需要登录后返回的token // 因此登录不在此发送请求(同时) // 采用监听和事件回调的方法,只有监听到登录和token返回时,才运行其他方法 LoginAndGetToken.OnTokenReceived += HandleTokenReceived; // 订阅事件,当 gameEscapeId 更新时调用 HandleGameEscapeIdUpdated selectGameEscape512.OnGameEscapeIdUpdated += HandleGameEscapeIdUpdated; } private string token; // 用于保存收到的 token void HandleTokenReceived(string token) { // 使用 token this.token = token; Debug.Log("HandleTokenReceived监听:" + token); StartCoroutine(GameEscapeRoutine(token)); // 启动协程,每2秒调用一次gameEscape } void HandleGameEscapeIdUpdated(int newGameEscapeId) { Debug.Log("GameEscapeId 已更新为: " + newGameEscapeId); // 在这里添加你想要执行的逻辑 } // 创建一个IEnumerator的协程 IEnumerator GameEscapeRoutine(string token) { while (true) // 无限循环来实现每2秒发送一次请求 { yield return new WaitForSeconds(5f); // 每2秒暂停一次 yield return gameEscape(token); // 调用gameEscape方法 } } public async Task gameEscape(string token) { // 用来给请求头赋值 string Authorization = token; Debug.Log("Loding(Authorization)请求头赋值" + Authorization); // 5.1查询最近一场大屠杀 Dictionary head51 = new Dictionary { { "Authorization", Authorization }, // 设置授权头 }; string response51 = await web.SendRequest("http://121.40.42.41:8080/snail/gameEscape/queryLatest", "POST", "{}", head51); Debug.Log("5.1查询最近一场大屠杀(独立)" + response51); // 查询最近一场大逃亡游戏详情: // 解析JSON数据 string json = response51; Response response = JsonConvert.DeserializeObject(json); if (response != null && response.code == 200 && response.data != null) { gameEscapeId = response.data.gameEscapeModel.id; Debug.Log("解析成功,id为: " + gameEscapeId); // 触发事件,通知所有订阅者 OnGameEscapeIdUpdated?.Invoke(gameEscapeId); } else { Debug.LogError("解析失败或响应错误"); } } void OnDestroy() { // 取消监听,避免内存泄漏 LoginAndGetToken.OnTokenReceived -= HandleTokenReceived; } // Update is called once per frame void Update() { } [Serializable] public class GameEscapeModel { public int id; // 解析游戏ID public string gameNo; // 包括游戏编号 } [Serializable] public class GameEscapeRoomResponseVo { public int escapeId; // 逃脱游戏的ID public int roomNo; // 房间号 } [Serializable] public class Data { public int carrySeconds; // 持续秒数 public GameEscapeModel gameEscapeModel; // 嵌套的GameEscapeModel对象 public List gameEscapeRoomResponseVoList; // 房间信息列表 public object gameEscapeUserModel; // 用户模型,可以保持为空或根据需要进行定义 } [Serializable] public class Response { public int code; // 状态码 public string message; // 返回信息 public Data data; // 数据对象 } } /*public class selectGameEscape512 : MonoBehaviour { int gameEscapeId; void Start() { // 由于除登录注册外的其他方法,都需要登录后返回的token // 因此登录不在此发送请求(同时) // 采用监听和事件回调的方法,只有监听到登录和token返回时,才运行其他方法 LoginAndGetToken.OnTokenReceived += HandleTokenReceived; } void HandleTokenReceived(string token) { // 使用 token Debug.Log("HandleTokenReceived监听:" + token); StartCoroutine(GameEscapeRoutine(token)); // 启动协程,每2秒调用一次gameEscape } // 创建一个IEnumerator的协程 IEnumerator GameEscapeRoutine(string token) { while (true) // 无限循环来实现每2秒发送一次请求 { yield return new WaitForSeconds(2f); // 每2秒暂停一次 yield return gameEscape(token); // 调用gameEscape方法 } } public async Task gameEscape(string token) { // 用来给请求头赋值 string Authorization = token; Debug.Log("Loding(Authorization)请求头赋值" + Authorization); // 5.1查询最近一场大屠杀 Dictionary head51 = new Dictionary { { "Authorization", Authorization }, // 设置授权头 }; string response51 = await web.SendRequest("http://121.40.42.41:8080/snail/gameEscape/queryLatest", "POST", "{}", head51); Debug.Log("5.1查询最近一场大屠杀(独立)" + response51); // 查询最近一场大逃亡游戏详情: // 解析JSON数据 string json = response51; Response response = JsonConvert.DeserializeObject(json); if (response != null && response.code == 200 && response.data != null) { gameEscapeId = response.data.gameEscapeModel.id; Debug.Log("解析成功,id为: " + gameEscapeId); } else { Debug.LogError("解析失败或响应错误"); } } void OnDestroy() { // 取消监听,避免内存泄漏 LoginAndGetToken.OnTokenReceived -= HandleTokenReceived; } // Update is called once per frame void Update() { } [Serializable] public class GameEscapeModel { public int id; // 解析游戏ID public string gameNo; // 包括游戏编号 } [Serializable] public class GameEscapeRoomResponseVo { public int escapeId; // 逃脱游戏的ID public int roomNo; // 房间号 } [Serializable] public class Data { public int carrySeconds; // 持续秒数 public GameEscapeModel gameEscapeModel; // 嵌套的GameEscapeModel对象 public List gameEscapeRoomResponseVoList; // 房间信息列表 public object gameEscapeUserModel; // 用户模型,可以保持为空或根据需要进行定义 } [Serializable] public class Response { public int code; // 状态码 public string message; // 返回信息 public Data data; // 数据对象 } }*/