107 lines
4.6 KiB
C#
107 lines
4.6 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.IO;
|
|||
|
using System.IO.Compression;
|
|||
|
using System.Text;
|
|||
|
using ThinkingSDK.PC.Constant;
|
|||
|
using ThinkingSDK.PC.Utils;
|
|||
|
using UnityEngine.Networking;
|
|||
|
using System.Collections;
|
|||
|
using ThinkingSDK.PC.Config;
|
|||
|
|
|||
|
namespace ThinkingSDK.PC.Request
|
|||
|
{
|
|||
|
public class ThinkingSDKNormalRequest:ThinkingSDKBaseRequest
|
|||
|
{
|
|||
|
public ThinkingSDKNormalRequest(string appId, string url, string data) :base(appId, url, data)
|
|||
|
{
|
|||
|
}
|
|||
|
public ThinkingSDKNormalRequest(string appId, string url) : base(appId, url)
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
public override IEnumerator SendData_2(ResponseHandle responseHandle, string data, int eventCount)
|
|||
|
{
|
|||
|
this.SetData(data);
|
|||
|
string uri = this.URL();
|
|||
|
var flush_time = ThinkingSDKUtil.GetTimeStamp();
|
|||
|
|
|||
|
string content = "{\"#app_id\":\"" + this.APPID() + "\",\"data\":" + data + ",\"#flush_time\":" + flush_time + "}";
|
|||
|
string encodeContent = Encode(content);
|
|||
|
byte[] contentCompressed = Encoding.UTF8.GetBytes(encodeContent);
|
|||
|
|
|||
|
using (UnityWebRequest webRequest = new UnityWebRequest(uri, "POST"))
|
|||
|
{
|
|||
|
webRequest.timeout = 30;
|
|||
|
webRequest.SetRequestHeader("Content-Type", "text/plain");
|
|||
|
webRequest.SetRequestHeader("appid", this.APPID());
|
|||
|
webRequest.SetRequestHeader("TA-Integration-Type", "PC");
|
|||
|
webRequest.SetRequestHeader("TA-Integration-Version", ThinkingSDKPublicConfig.Version());
|
|||
|
webRequest.SetRequestHeader("TA-Integration-Count", "1");
|
|||
|
webRequest.SetRequestHeader("TA-Integration-Extra", "PC");
|
|||
|
webRequest.uploadHandler = (UploadHandler)new UploadHandlerRaw(contentCompressed);
|
|||
|
webRequest.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
|
|||
|
|
|||
|
if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Send event Request:\n " + content + "\n URL = " + 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("Send event Response Error:\n " + webRequest.error);
|
|||
|
break;
|
|||
|
case UnityWebRequest.Result.Success:
|
|||
|
string resultText = webRequest.downloadHandler.text;
|
|||
|
if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Send event Response:\n " + resultText);
|
|||
|
if (!string.IsNullOrEmpty(resultText))
|
|||
|
{
|
|||
|
resultDict = ThinkingSDKJSON.Deserialize(resultText);
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
#else
|
|||
|
if (webRequest.isHttpError || webRequest.isNetworkError)
|
|||
|
{
|
|||
|
if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Send event Response Error:\n " + webRequest.error);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
string resultText = webRequest.downloadHandler.text;
|
|||
|
if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Send event Response:\n " + resultText);
|
|||
|
if (!string.IsNullOrEmpty(resultText))
|
|||
|
{
|
|||
|
resultDict = ThinkingSDKJSON.Deserialize(resultText);
|
|||
|
}
|
|||
|
}
|
|||
|
#endif
|
|||
|
if (responseHandle != null)
|
|||
|
{
|
|||
|
if (resultDict != null)
|
|||
|
{
|
|||
|
resultDict.Add("flush_count", eventCount);
|
|||
|
}
|
|||
|
responseHandle(resultDict);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
private static string Encode(string inputStr)
|
|||
|
{
|
|||
|
byte[] inputBytes = Encoding.UTF8.GetBytes(inputStr);
|
|||
|
using (var outputStream = new MemoryStream())
|
|||
|
{
|
|||
|
using (var gzipStream = new GZipStream(outputStream, CompressionMode.Compress))
|
|||
|
gzipStream.Write(inputBytes, 0, inputBytes.Length);
|
|||
|
byte[] output = outputStream.ToArray();
|
|||
|
return Convert.ToBase64String(output);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|