189 lines
5.6 KiB
C#
189 lines
5.6 KiB
C#
|
|
using Newtonsoft.Json;
|
|||
|
|
using QFramework;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.IO;
|
|||
|
|
using System.Runtime.InteropServices;
|
|||
|
|
using System.Security.Cryptography;
|
|||
|
|
using System.Text;
|
|||
|
|
using UnityEngine;
|
|||
|
|
using UnityEngine.Events;
|
|||
|
|
using UnityEngine.Networking;
|
|||
|
|
|
|||
|
|
public class WebGLHelper : Singleton<WebGLHelper>
|
|||
|
|
{
|
|||
|
|
private WebGLHelper() { }
|
|||
|
|
public class LabData
|
|||
|
|
{
|
|||
|
|
public string GUID;
|
|||
|
|
public string ExpID;
|
|||
|
|
public string HOST;
|
|||
|
|
public string PARA1;
|
|||
|
|
public string PARA;
|
|||
|
|
public string PARA2;
|
|||
|
|
}
|
|||
|
|
[DllImport("__Internal")]
|
|||
|
|
private static extern string GetURLParameter(string name);
|
|||
|
|
|
|||
|
|
string token = string.Empty;
|
|||
|
|
|
|||
|
|
LabData labData = new LabData();
|
|||
|
|
[SerializeField]
|
|||
|
|
private TextAsset RSA;
|
|||
|
|
private const int RsaKeySize = 2048;
|
|||
|
|
|
|||
|
|
public string uploadUrl;
|
|||
|
|
|
|||
|
|
public void Init()
|
|||
|
|
{
|
|||
|
|
token = GetURLParameter("token").Replace("%2B", "+");
|
|||
|
|
RSA = Resources.Load<TextAsset>("RSA");
|
|||
|
|
string urlData = Decrypt(token);
|
|||
|
|
var datas = urlData.Split("&");
|
|||
|
|
labData.GUID = datas[0];
|
|||
|
|
labData.ExpID = datas[1];
|
|||
|
|
labData.HOST = datas[2];
|
|||
|
|
labData.PARA1 = datas[3];
|
|||
|
|
labData.PARA = datas[4];
|
|||
|
|
labData.PARA2 = datas[5];
|
|||
|
|
|
|||
|
|
uploadUrl = Path.Combine(labData.HOST, "host/public/Exp/AddScore/");
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// Decrypts encrypted text given a RSA private key file path.<2E><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD> RSA ˽Կ<CBBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|||
|
|
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="encryptedText"><3E><><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="pathToPrivateKey"><3E><><EFBFBD>ڼ<EFBFBD><DABC>ܵ<EFBFBD>˽Կ·<D4BF><C2B7>.</param>
|
|||
|
|
/// <returns>δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ַ<EFBFBD><D6B7><EFBFBD></returns>
|
|||
|
|
public string Decrypt(string encryptedText)
|
|||
|
|
{
|
|||
|
|
using (var rsa = new RSACryptoServiceProvider(RsaKeySize))
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
string privateXmlKey = RSA.text;
|
|||
|
|
rsa.FromXmlString(privateXmlKey);
|
|||
|
|
Debug.Log("encryptedText " + encryptedText);
|
|||
|
|
var bytesEncrypted = Convert.FromBase64String(encryptedText);
|
|||
|
|
string b = Encoding.UTF8.GetString(bytesEncrypted);
|
|||
|
|
Debug.Log("byte " + b);
|
|||
|
|
//var bytesPlainText = rsa.Decrypt(bytesEncrypted, false);
|
|||
|
|
var bytesPlainText = rsa.Decrypt(bytesEncrypted, false);
|
|||
|
|
Debug.Log("bytesPlainText " + bytesPlainText);
|
|||
|
|
return System.Text.Encoding.UTF8.GetString(bytesPlainText);
|
|||
|
|
}
|
|||
|
|
finally
|
|||
|
|
{
|
|||
|
|
rsa.PersistKeyInCsp = false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
public void UpLoadData(int totalScore, List<string> stepNames, List<int> maxScore, List<int> score)
|
|||
|
|
{
|
|||
|
|
var data = new UploadData();
|
|||
|
|
data.GUID = labData.GUID;
|
|||
|
|
data.ExpID = int.Parse(labData.ExpID);
|
|||
|
|
data.score = totalScore;
|
|||
|
|
data.flag = true;
|
|||
|
|
|
|||
|
|
var list = new List<Expstepvtwolist>();
|
|||
|
|
for (int i = 0; i < stepNames.Count; i++)
|
|||
|
|
{
|
|||
|
|
var step = new Expstepvtwolist();
|
|||
|
|
step.ExpStepName = stepNames[i];
|
|||
|
|
step.maxScore = maxScore[i];
|
|||
|
|
step.score = score[i];
|
|||
|
|
}
|
|||
|
|
data.ExpStepVTwoList = list.ToArray();
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
IEnumerator SendScore(string json, UnityAction<string> action)
|
|||
|
|
{
|
|||
|
|
if (string.IsNullOrEmpty(uploadUrl))
|
|||
|
|
{
|
|||
|
|
Debug.LogError("<22>ϴ<EFBFBD><CFB4>ӿڵ<D3BF>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>:" + uploadUrl);
|
|||
|
|
yield break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
using (UnityWebRequest request = new UnityWebRequest(uploadUrl, "POST"))
|
|||
|
|
{
|
|||
|
|
request.SetRequestHeader("Content-Type", "application/json");
|
|||
|
|
request.uploadHandler = new UploadHandlerRaw(System.Text.Encoding.UTF8.GetBytes(json));
|
|||
|
|
request.downloadHandler = new DownloadHandlerBuffer();
|
|||
|
|
yield return request.SendWebRequest();
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
|
|||
|
|
if (request.result == UnityWebRequest.Result.ConnectionError ||
|
|||
|
|
request.result == UnityWebRequest.Result.ProtocolError)
|
|||
|
|
{
|
|||
|
|
Debug.LogError($"Upload failed: {request.error}");
|
|||
|
|
Debug.LogError($"Response Code: {request.responseCode}");
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Debug.Log("Upload complete!");
|
|||
|
|
Debug.Log($"Response Code: {request.responseCode}");
|
|||
|
|
Debug.Log($"Server Response: {request.downloadHandler.text}");
|
|||
|
|
Response response = JsonConvert.DeserializeObject<Response>(request.downloadHandler.text);
|
|||
|
|
Debug.LogError(response.msg);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
public class UploadData
|
|||
|
|
{
|
|||
|
|
public string GUID { get; set; }
|
|||
|
|
// ʵ<><CAB5> ID
|
|||
|
|
public int ExpID { get; set; }
|
|||
|
|
// <20>ɼ<EFBFBD>
|
|||
|
|
public int score { get; set; }
|
|||
|
|
// <20><>־λ<D6BE><CEBB>Ĭ<EFBFBD><C4AC>ֵ true
|
|||
|
|
public bool flag { get; set; }
|
|||
|
|
// ʵ<>鲽<EFBFBD><E9B2BD><EFBFBD>б<EFBFBD>
|
|||
|
|
public Expstepvtwolist[] ExpStepVTwoList { get; set; }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public class Expstepvtwolist
|
|||
|
|
{
|
|||
|
|
// ʵ<>鲽<EFBFBD><E9B2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public int seq { get; set; }
|
|||
|
|
// ʵ<>鲽<EFBFBD><E9B2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public string ExpStepName = "";
|
|||
|
|
// ʵ<>鲽<EFBFBD><E9B2BD>״̬
|
|||
|
|
public string StepState = "";
|
|||
|
|
// ʵ<>鲽<EFBFBD>迪ʼʱ<CABC><CAB1>
|
|||
|
|
public DateTime startTime = default;
|
|||
|
|
// ʵ<>鲽<EFBFBD><E9B2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
public DateTime endTime = default;
|
|||
|
|
// ʵ<>鲽<EFBFBD><E9B2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
public int expectTime = 0;
|
|||
|
|
// ʵ<>鲽<EFBFBD><E9B2BD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>0 ~100<30><30><EFBFBD>ٷ<EFBFBD><D9B7><EFBFBD>
|
|||
|
|
public int maxScore = 100;
|
|||
|
|
// ʵ<>鲽<EFBFBD><E9B2BD><EFBFBD>÷֣<C3B7>0 ~100<30><30><EFBFBD>ٷ<EFBFBD><D9B7><EFBFBD>
|
|||
|
|
public int score = 0;
|
|||
|
|
// ʵ<>鲽<EFBFBD><E9B2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public int repeatCount = 1;
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۣ<EFBFBD>200 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public string evaluation = "";
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ģ<EFBFBD>ͣ<EFBFBD>200 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public string scoringModel = "";
|
|||
|
|
// <20><>ע
|
|||
|
|
public string remarks { get; set; }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public class Response
|
|||
|
|
{
|
|||
|
|
public string msg;
|
|||
|
|
public bool success;
|
|||
|
|
}
|