195 lines
5.3 KiB
C#
195 lines
5.3 KiB
C#
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Net.Http;
|
|
using System.Threading.Tasks;
|
|
using UnityEngine;
|
|
using UnityEngine.Networking;
|
|
using UnityEngine.UI;
|
|
|
|
[AddComponentMenu("EncryptionScript/密钥")]
|
|
public class EncryptionScript : MonoBehaviour
|
|
{
|
|
public string encryptionKey = "defaultKey";
|
|
private string url_key = "http://172.16.1.253:8087/priceRule.json";
|
|
[SerializeField] private string inputKey = null;
|
|
/// <summary>
|
|
/// 密钥是否过期
|
|
/// </summary>
|
|
public static bool isOverdueKey = true;
|
|
/// <summary>
|
|
/// 密钥运行时间
|
|
/// </summary>
|
|
private float elapsedTime = 0;
|
|
/// <summary>
|
|
/// 密钥有效时间
|
|
/// </summary>
|
|
private float averageSecondsInMonth = 5270400f;
|
|
|
|
private /*async*/ void Start()
|
|
{
|
|
//await GetKey();//读取JSON获取密钥
|
|
encryptionKey = (KeyGenerator.GenerateKey("123"));
|
|
averageSecondsInMonth = 5f;
|
|
}
|
|
|
|
private /*async*/ void Update()
|
|
{
|
|
// 等待用户输入密钥
|
|
if (elapsedTime > averageSecondsInMonth || Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter))
|
|
{
|
|
//await GetKey();//读取JSON更新密钥
|
|
if (elapsedTime > averageSecondsInMonth)
|
|
{
|
|
encryptionKey = (KeyGenerator.GenerateKey("123"));//更新密钥
|
|
isOverdueKey = true;
|
|
}
|
|
if (isOverdueKey && encryptionKey.Equals(inputKey))
|
|
{
|
|
ResetTimer();
|
|
isOverdueKey = false;
|
|
Debug.Log("密钥正确,继续运行程序");
|
|
}
|
|
else if (isOverdueKey)
|
|
{
|
|
Debug.Log("密钥错误,程序无法运行");
|
|
Application.Quit(); // 密钥错误,退出应用程序
|
|
}
|
|
}
|
|
/*else if (isOverdueKey && Input.GetKeyDown(KeyCode.Backspace))
|
|
{
|
|
if (inputKey.Length >= 1)
|
|
inputKey = inputKey.Substring(0, inputKey.Length - 1);
|
|
else
|
|
return;
|
|
}
|
|
else if (isOverdueKey && Input.anyKeyDown)
|
|
{
|
|
inputKey += Input.inputString;
|
|
}*/
|
|
else if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))
|
|
{
|
|
if (isOverdueKey && Input.GetKeyDown(KeyCode.V))
|
|
{
|
|
string pasteText = GUIUtility.systemCopyBuffer; // 获取系统粘贴板的内容
|
|
inputKey = pasteText; // 将粘贴的值赋给Input字段
|
|
}
|
|
}
|
|
}
|
|
|
|
private void LateUpdate()
|
|
{
|
|
//elapsedTime += Time.deltaTime;
|
|
//Debug.Log("elapsedTime: " + elapsedTime);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 重置计时器、秘钥有效期更新
|
|
/// </summary>
|
|
public void ResetTimer()
|
|
{
|
|
elapsedTime = 0f;
|
|
averageSecondsInMonth = 5270400f;
|
|
}
|
|
|
|
private IEnumerator Get_Api(string url_pice, Action<string> callback)
|
|
{
|
|
string apiDoc_p = null;
|
|
yield return StartCoroutine(GetApiDocumentation(url_pice, (result) =>
|
|
{
|
|
apiDoc_p = result;
|
|
}));
|
|
//var apiDoc_p = await GetApiDocumentation(url_pice);
|
|
callback.Invoke(apiDoc_p);
|
|
}
|
|
|
|
private IEnumerator GetApiDocumentation(string apiUrl, Action<string> callback)
|
|
{
|
|
using (UnityWebRequest request = UnityWebRequest.Get(apiUrl))
|
|
{
|
|
yield return request.SendWebRequest();
|
|
|
|
if (request.isNetworkError || request.isHttpError)
|
|
{
|
|
Debug.LogError(request.error);
|
|
callback(null);
|
|
}
|
|
else
|
|
{
|
|
string responseBody = request.downloadHandler.text;
|
|
// 处理响应内容
|
|
callback(responseBody);
|
|
}
|
|
}
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class Data
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public double flat;
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public double tip;
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public double valley;
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public double peak;
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class Root
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public Data data;
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public int code;
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public string msg;
|
|
}
|
|
|
|
public IEnumerator GetKey()
|
|
{
|
|
|
|
string apiData = null;
|
|
yield return StartCoroutine(Get_Api(url_key,
|
|
(result) =>
|
|
{
|
|
apiData = result;
|
|
}));
|
|
try
|
|
{
|
|
//var apiData = await Get_Api(url_key);
|
|
if (apiData != null)
|
|
{
|
|
Debug.Log("API CabinetList: " + apiData);
|
|
Root root = JsonConvert.DeserializeObject<Root>(apiData);
|
|
encryptionKey = root.data.flat.ToString();
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("API请求失败或返回空数据。");
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Debug.LogError("API请求期间发生错误: " + e.Message);
|
|
}
|
|
|
|
}
|
|
}
|