156 lines
6.0 KiB
C#
156 lines
6.0 KiB
C#
|
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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|