193 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			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);
 | |
|         }
 | |
|     }
 | |
| }
 |