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

502 lines
16 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 selectQueryKill : 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 QueryKill();//==================================================================================放在这里仅因为懒得写触发条件可以放在任何地方比如input.GetKeyDown.....必须改
// Debug.Log("接收到新的 GameEscapeId: " + escapeId);
}
// 加载初始数据,使用最新的 token
public async void LoadInitialData()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法加载初始数据token 未设置。");
return;
}
await QueryKill();
}
// 加载游戏逃亡数据,使用最新的 escapeId 和 token
public async void selectQueryKill1()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法加载游戏逃亡数据token 未设置。");
return;
}
if (escapeId == -1)
{
Debug.LogWarning("无法加载游戏逃亡数据escapeId 未设置。");
return;
}
// 查询击杀数据
await QueryKill();//=================================================================================================================================
}
//===============================================================================================================================================================================================================================
// 查询击杀信息
public async Task QueryKill()
{
var headers = CreateHeaders();
string body = $@"
{{
""userId"": 106,
""escapeId"": {escapeId}
}}";
string response = await web.SendRequest("http://121.40.42.41:8080/snail/LatestGame511/queryKill", "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;
}
}*/
//可改id版
/*public class SelectQueryKill514 : MonoBehaviour
{
public string token = null; // 保存最新的 token初始为 null
public int escapeId = -1; // 保存最新的 escapeId初始为 -1 表示未设置
public int userId;//用户Id;
private string lastQueryKillResponse = null; // 保存最新的击杀信息查询响应
// 假设有一个手动查询击杀信息的按钮=======================================================================================
public Button queryKillButton;
void Start()
{
// 注册监听事件,当收到 token 时,触发 HandleTokenReceived
LoginAndGetToken.OnTokenReceived += HandleTokenReceived;
// 注册监听,当 escapeId 更新时调用 HandleGameEscapeIdUpdated
selectLatest511.OnGameEscapeIdUpdated += HandleGameEscapeIdUpdated;
// 假设按钮被点击时调用 OnQueryKillButtonClicked======================================================================
if (queryKillButton != null)
{
queryKillButton.onClick.AddListener(OnQueryKillButtonClicked);
}
}
// 当接收到 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 更新时自动调用查询击杀信息
lastQueryKillResponse = await QueryKill();
Debug.Log("HandleGameEscapeIdUpdated 处理的查询击杀信息响应: " + lastQueryKillResponse);
}
// 加载初始数据,使用最新的 token
public async void LoadInitialData()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法加载初始数据token 未设置。");
return;
}
// 调用查询击杀信息方法
lastQueryKillResponse = await QueryKill();
Debug.Log("初始加载的查询击杀信息响应: " + lastQueryKillResponse);
}
// 按钮点击后触发击杀信息查询操作
public async void OnQueryKillButtonClicked()
{
// 检查 token 和 escapeId 是否已正确设置
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法查询击杀信息token 未设置。");
return;
}
if (escapeId == -1)
{
Debug.LogWarning("无法查询击杀信息escapeId 未设置。");
return;
}
// 调用查询击杀信息方法
lastQueryKillResponse = await QueryKill();
Debug.Log("用户按钮触发的查询击杀信息响应: " + lastQueryKillResponse);
// 根据响应做进一步的处理
HandleQueryKillResponse(lastQueryKillResponse);
}
// 查询击杀信息
public async Task<string> QueryKill()
{
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/queryKill", "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 }
};
}
// 处理 QueryKill 方法的响应
private void HandleQueryKillResponse(string response)
{
if (response.Contains("success"))
{
Debug.Log("查询击杀信息成功!");
}
else
{
Debug.LogWarning("查询击杀信息失败,服务器响应: " + response);
}
}
void OnDestroy()
{
// 注销监听事件,避免内存泄漏
LoginAndGetToken.OnTokenReceived -= HandleTokenReceived;
selectLatest511.OnGameEscapeIdUpdated -= HandleGameEscapeIdUpdated;
// 取消按钮的点击监听=================================================================================================
if (queryKillButton != null)
{
queryKillButton.onClick.RemoveListener(OnQueryKillButtonClicked);
}
}
}*/
//解析+单例
public class SelectQueryKill514 : MonoBehaviour
{
// 单例模式实例
public static SelectQueryKill514 Instance { get; private set; }
public string token = null; // 保存最新的 token初始为 null
public int escapeId = -1; // 保存最新的 escapeId初始为 -1 表示未设置
public int userId; // 用户 Id
// 解析的响应字段作为全局变量
public int latestCode; // 保存最新的 code
public string latestMessage; // 保存最新的提示语
public int latestRoomNoKill; // 被击杀的房间编号
public int latestRoomNoRemain; // 留存的房间编号
// 保存 JSON 响应为字符串
private string lastQueryKillResponse = null;
public Button queryKillButton; // 查询按钮
void Awake()
{
// 实现单例模式
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject); // 保证场景切换时不销毁这个对象
}
else
{
Destroy(gameObject); // 确保只有一个实例
}
}
void Start()
{
// 注册监听事件,当收到 token 时,触发 HandleTokenReceived
LoginAndGetToken.OnTokenReceived += HandleTokenReceived;
// 注册监听,当 escapeId 更新时调用 HandleGameEscapeIdUpdated
selectLatest511.OnGameEscapeIdUpdated += HandleGameEscapeIdUpdated;
// 假设按钮被点击时调用 OnQueryKillButtonClicked
if (queryKillButton != null)
{
queryKillButton.onClick.AddListener(OnQueryKillButtonClicked);
}
}
// 当接收到 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 更新时自动调用查询击杀信息
lastQueryKillResponse = await QueryKill();
Debug.Log("HandleGameEscapeIdUpdated 处理的查询击杀信息响应: " + lastQueryKillResponse);
}
// 加载初始数据,使用最新的 token
public async void LoadInitialData()
{
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法加载初始数据token 未设置。");
return;
}
// 调用查询击杀信息方法
lastQueryKillResponse = await QueryKill();
Debug.Log("初始加载的查询击杀信息响应: " + lastQueryKillResponse);
}
// 按钮点击后触发击杀信息查询操作
public async void OnQueryKillButtonClicked()
{
// 检查 token 和 escapeId 是否已正确设置
if (string.IsNullOrEmpty(token))
{
Debug.LogWarning("无法查询击杀信息token 未设置。");
return;
}
if (escapeId == -1)
{
Debug.LogWarning("无法查询击杀信息escapeId 未设置。");
return;
}
// 调用查询击杀信息方法
lastQueryKillResponse = await QueryKill();
Debug.Log("用户按钮触发的查询击杀信息响应: " + lastQueryKillResponse);
// 根据响应做进一步的处理
HandleQueryKillResponse(lastQueryKillResponse);
}
// 查询击杀信息
public async Task<string> QueryKill()
{
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/queryKill", "POST", body, headers);
Debug.Log("查询击杀信息响应: " + response);
HandleQueryKillResponse(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 }
};
}
// 处理 QueryKill 方法的响应并解析字段
private void HandleQueryKillResponse(string response)
{
// 保存原始响应字符串
lastQueryKillResponse = response;
try
{
ServerResponse serverResponse = JsonConvert.DeserializeObject<ServerResponse>(response);
if (serverResponse != null && serverResponse.code == 200)
{
Debug.Log("查询击杀信息成功!");
// 更新全局变量保存每个字段
latestCode = serverResponse.code;
latestMessage = serverResponse.message;
if (serverResponse.data != null)
{
latestRoomNoKill = serverResponse.data.roomNoKill;
latestRoomNoRemain = serverResponse.data.roomNoRemain;
Debug.Log($"Room No Kill: {latestRoomNoKill}, Room No Remain: {latestRoomNoRemain}");
}
}
else
{
Debug.LogWarning("查询击杀信息失败,服务器响应: " + response);
}
}
catch (Exception e)
{
Debug.LogWarning("解析击杀信息响应失败: " + e.Message);
}
}
void OnDestroy()
{
// 注销监听事件,避免内存泄漏
LoginAndGetToken.OnTokenReceived -= HandleTokenReceived;
selectLatest511.OnGameEscapeIdUpdated -= HandleGameEscapeIdUpdated;
// 取消按钮的点击监听
if (queryKillButton != null)
{
queryKillButton.onClick.RemoveListener(OnQueryKillButtonClicked);
}
}
// 数据类,用于 JSON 解析
[Serializable]
public class Data
{
public int roomNoKill; // 被击杀的房间编号
public int roomNoRemain; // 留存的房间编号
}
[Serializable]
public class ServerResponse
{
public int code; // 响应状态码
public string message; // 提示语
public Data data; // 数据对象
}
}
//使用示例
//public class AnotherClass : MonoBehaviour
//{
// void Start()
// {
// int code = SelectQueryKill514.Instance.latestCode;
// string message = SelectQueryKill514.Instance.latestMessage;
// int roomNoKill = SelectQueryKill514.Instance.latestRoomNoKill;
// int roomNoRemain = SelectQueryKill514.Instance.latestRoomNoRemain;
// string jsonResponse = SelectQueryKill514.Instance.lastQueryKillResponse;
// Debug.Log($"Code: {code}, Message: {message}, Room No Kill: {roomNoKill}, Room No Remain: {roomNoRemain}");
// Debug.Log($"Original JSON Response: {jsonResponse}");
// }
//}