SDK_UnityMoney/Assets/Plugins/PC/Request/ThinkingSDKBaseRequest.cs

156 lines
6.0 KiB
C#
Raw Normal View History

2025-08-30 09:38:53 +00:00
using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Collections.Generic;
using ThinkingSDK.PC.Constant;
using ThinkingSDK.PC.Utils;
using System.IO;
using UnityEngine.Networking;
using System.Collections;
using ThinkingSDK.PC.Config;
namespace ThinkingSDK.PC.Request
{
/*
* Enumerate the form of data reported by post, and the enumeration value represents json and form forms
*/
enum POST_TYPE { JSON, FORM };
public abstract class ThinkingSDKBaseRequest
{
private string mAppid;
private string mURL;
private string mData;
public ThinkingSDKBaseRequest(string appId, string url, string data)
{
mAppid = appId;
mURL = url;
mData = data;
}
public ThinkingSDKBaseRequest(string appId, string url)
{
mAppid = appId;
mURL = url;
}
public void SetData(string data)
{
this.mData = data;
}
public string APPID() {
return mAppid;
}
public string URL()
{
return mURL;
}
public string Data()
{
return mData;
}
/**
* initialization interface
*/
public static void GetConfig(string url,ResponseHandle responseHandle)
{
if (!ThinkingSDKUtil.IsValiadURL(url))
{
if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Invalid Url:\n" + url);
}
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var responseResult = new StreamReader(response.GetResponseStream()).ReadToEnd();
if (responseResult != null)
{
if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Request URL:\n"+url);
if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Response:\n"+responseResult);
}
}
public bool MyRemoteCertificateValidationCallback(System.Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
bool isOk = true;
// If there are errors in the certificate chain,
// look at each error to determine the cause.
if (sslPolicyErrors != SslPolicyErrors.None) {
for (int i=0; i<chain.ChainStatus.Length; i++) {
if (chain.ChainStatus[i].Status == X509ChainStatusFlags.RevocationStatusUnknown) {
continue;
}
chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan (0, 1, 0);
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllFlags;
bool chainIsValid = chain.Build ((X509Certificate2)certificate);
if (!chainIsValid) {
isOk = false;
break;
}
}
}
return isOk;
}
abstract public IEnumerator SendData_2(ResponseHandle responseHandle, string data, int eventCount);
public static IEnumerator GetWithFORM_2(string url, string appId, Dictionary<string, object> param, ResponseHandle responseHandle)
{
string uri = url + "?appid=" + appId;
if (param != null)
{
uri = uri + "&data=" + ThinkingSDKJSON.Serialize(param);
}
using (UnityWebRequest webRequest = UnityWebRequest.Get(uri))
{
webRequest.timeout = 30;
webRequest.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Request URL: \n" + uri);
// Request and wait for the desired page.
yield return webRequest.SendWebRequest();
Dictionary<string,object> resultDict = null;
#if UNITY_2020_1_OR_NEWER
switch (webRequest.result)
{
case UnityWebRequest.Result.ConnectionError:
case UnityWebRequest.Result.DataProcessingError:
case UnityWebRequest.Result.ProtocolError:
//if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Error response: \n" + webRequest.error);
break;
case UnityWebRequest.Result.Success:
string resultText = webRequest.downloadHandler.text;
//if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Response: \n" + resultText);
if (!string.IsNullOrEmpty(resultText))
{
resultDict = ThinkingSDKJSON.Deserialize(resultText);
}
break;
}
#else
if (webRequest.isHttpError || webRequest.isNetworkError)
{
//if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Error response: \n" + webRequest.error);
}
else
{
string resultText = webRequest.downloadHandler.text;
//if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Response: \n" + resultText);
if (!string.IsNullOrEmpty(resultText))
{
resultDict = ThinkingSDKJSON.Deserialize(resultText);
}
}
#endif
if (responseHandle != null)
{
responseHandle(resultDict);
}
}
}
}
}