SDK_UnityMoney/Assets/Plugins/PC/Config/ThinkingSDKConfig.cs

193 lines
6.6 KiB
C#

using System;
using System.Collections.Generic;
using ThinkingSDK.PC.Utils;
using ThinkingSDK.PC.Request;
using ThinkingSDK.PC.Constant;
using UnityEngine;
using System.Collections;
namespace ThinkingSDK.PC.Config
{
public enum Mode
{
/* normal mode, the data will be stored in the cache and reported in batches */
NORMAL,
/* debug mode, the data will be reported one by one */
DEBUG,
/* debug only mode, only verify the data, and will not store it */
DEBUG_ONLY
}
public class ThinkingSDKConfig
{
private string mToken;
private string mServerUrl;
private string mNormalUrl;
private string mDebugUrl;
private string mConfigUrl;
private string mInstanceName;
private Mode mMode = Mode.NORMAL;
private TimeZoneInfo mTimeZone;
public int mUploadInterval = 30;
public int mUploadSize = 30;
private List<string> mDisableEvents = new List<string>();
private static Dictionary<string, ThinkingSDKConfig> sInstances = new Dictionary<string, ThinkingSDKConfig>();
private ResponseHandle mCallback;
private ThinkingSDKConfig(string token,string serverUrl, string instanceName)
{
//verify server url
serverUrl = this.VerifyUrl(serverUrl);
this.mServerUrl = serverUrl;
this.mNormalUrl = serverUrl + "/sync";
this.mDebugUrl = serverUrl + "/data_debug";
this.mConfigUrl = serverUrl + "/config";
this.mToken = token;
this.mInstanceName = instanceName;
try
{
this.mTimeZone = TimeZoneInfo.Local;
}
catch (Exception)
{
//if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("TimeZoneInfo initial failed :" + e.Message);
}
}
private string VerifyUrl(string serverUrl)
{
Uri uri = new Uri(serverUrl);
serverUrl = uri.Scheme + "://" + uri.Host + ":" + uri.Port;
return serverUrl;
}
public void SetMode(Mode mode)
{
this.mMode = mode;
}
public Mode GetMode()
{
return this.mMode;
}
public string DebugURL()
{
return this.mDebugUrl;
}
public string NormalURL()
{
return this.mNormalUrl;
}
public string ConfigURL()
{
return this.mConfigUrl;
}
public string Server()
{
return this.mServerUrl;
}
public string InstanceName()
{
return this.mInstanceName;
}
public static ThinkingSDKConfig GetInstance(string token, string server, string instanceName)
{
ThinkingSDKConfig config = null;
if (!string.IsNullOrEmpty(instanceName))
{
if (sInstances.ContainsKey(instanceName))
{
config = sInstances[instanceName];
}
else
{
config = new ThinkingSDKConfig(token, server, instanceName);
sInstances.Add(instanceName, config);
}
}
else
{
if (sInstances.ContainsKey(token))
{
config = sInstances[token];
}
else
{
config = new ThinkingSDKConfig(token, server, null);
sInstances.Add(token, config);
}
}
return config;
}
public void SetTimeZone(TimeZoneInfo timeZoneInfo)
{
this.mTimeZone = timeZoneInfo;
}
public TimeZoneInfo TimeZone()
{
return this.mTimeZone;
}
public List<string> DisableEvents() {
return this.mDisableEvents;
}
public bool IsDisabledEvent(string eventName)
{
if (this.mDisableEvents == null)
{
return false;
}
else
{
return this.mDisableEvents.Contains(eventName);
}
}
public void UpdateConfig(MonoBehaviour mono, ResponseHandle callback = null)
{
mCallback = callback;
mono.StartCoroutine(this.GetWithFORM(this.mConfigUrl,this.mToken,null, ConfigResponseHandle));
}
private void ConfigResponseHandle(Dictionary<string, object> result)
{
try
{
if (result != null && result["code"] != null
&& int.Parse(result["code"].ToString()) == 0)
{
Dictionary<string, object> data = (Dictionary<string, object>)result["data"];
if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Get remote config success: " + ThinkingSDKJSON.Serialize(data));
foreach (KeyValuePair<string, object> kv in data)
{
if (kv.Key == "sync_interval")
{
this.mUploadInterval = int.Parse(kv.Value.ToString());
}
else if (kv.Key == "sync_batch_size")
{
this.mUploadSize = int.Parse(kv.Value.ToString());
}
else if (kv.Key == "disable_event_list")
{
foreach (var item in (List<object>)kv.Value)
{
this.mDisableEvents.Add((string)item);
}
}
}
}
else
{
if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Get remote config failed: " + ThinkingSDKJSON.Serialize(result));
}
}
catch (Exception ex)
{
if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("Get remote config failed: " + ex.Message);
}
if (mCallback != null)
{
mCallback();
}
}
private IEnumerator GetWithFORM (string url, string appId, Dictionary<string, object> param, ResponseHandle responseHandle) {
yield return ThinkingSDKBaseRequest.GetWithFORM_2(this.mConfigUrl,this.mToken,param,responseHandle);
}
}
}