200 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			200 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using UnityEngine; | |||
|  | using System; | |||
|  | using System.Xml; | |||
|  | using System.Collections.Generic; | |||
|  | using ThinkingSDK.PC.Config; | |||
|  | using ThinkingSDK.PC.Constant; | |||
|  | using ThinkingSDK.PC.Storage; | |||
|  | 
 | |||
|  | namespace ThinkingSDK.PC.Utils | |||
|  | { | |||
|  |     public class ThinkingSDKUtil | |||
|  |     { | |||
|  |         private static Dictionary<string, object> deviceInfo = null; | |||
|  |         public ThinkingSDKUtil() | |||
|  |         { | |||
|  | 
 | |||
|  |         } | |||
|  |         public static List<string> DisPresetProperties = ThinkingSDKUtil.GetDisPresetProperties(); | |||
|  |         /* | |||
|  |          * Check if the URL is valid | |||
|  |          */ | |||
|  |         public static bool IsValiadURL(string url) | |||
|  |         { | |||
|  |             return !(url == null || url.Length == 0 || !url.Contains("http") || !url.Contains("https")); | |||
|  |         } | |||
|  |         /* | |||
|  |          * Check if the string is empty | |||
|  |          */ | |||
|  |         public static bool IsEmptyString(string str) | |||
|  |         { | |||
|  |             return (str == null || str.Length == 0); | |||
|  |         } | |||
|  |         public static Dictionary<string, object> DeviceInfo() | |||
|  |         { | |||
|  |             if (deviceInfo == null) | |||
|  |             { | |||
|  |                 deviceInfo = new Dictionary<string, object>(); | |||
|  |                 deviceInfo[ThinkingSDKConstant.DEVICE_ID] = ThinkingSDKDeviceInfo.DeviceID(); | |||
|  |                 //deviceInfo[ThinkingSDKConstant.CARRIER] = ThinkingSDKDeviceInfo.Carrier(); //PC端不采集 | |||
|  |                 deviceInfo[ThinkingSDKConstant.OS] = ThinkingSDKDeviceInfo.OS(); | |||
|  |                 deviceInfo[ThinkingSDKConstant.OS_VERSION] = ThinkingSDKDeviceInfo.OSVersion(); | |||
|  |                 deviceInfo[ThinkingSDKConstant.SCREEN_HEIGHT] = ThinkingSDKDeviceInfo.ScreenHeight(); | |||
|  |                 deviceInfo[ThinkingSDKConstant.SCREEN_WIDTH] = ThinkingSDKDeviceInfo.ScreenWidth(); | |||
|  |                 deviceInfo[ThinkingSDKConstant.MANUFACTURE] = ThinkingSDKDeviceInfo.Manufacture(); | |||
|  |                 deviceInfo[ThinkingSDKConstant.DEVICE_MODEL] = ThinkingSDKDeviceInfo.DeviceModel(); | |||
|  |                 deviceInfo[ThinkingSDKConstant.APP_VERSION] = ThinkingSDKAppInfo.AppVersion(); | |||
|  |                 deviceInfo[ThinkingSDKConstant.APP_BUNDLEID] = ThinkingSDKAppInfo.AppIdentifier(); | |||
|  |                 deviceInfo[ThinkingSDKConstant.LIB] = ThinkingSDKAppInfo.LibName(); | |||
|  |                 deviceInfo[ThinkingSDKConstant.LIB_VERSION] = ThinkingSDKAppInfo.LibVersion(); | |||
|  |             } | |||
|  |             deviceInfo[ThinkingSDKConstant.SYSTEM_LANGUAGE] = ThinkingSDKDeviceInfo.MachineLanguage(); | |||
|  |             deviceInfo[ThinkingSDKConstant.NETWORK_TYPE] = ThinkingSDKDeviceInfo.NetworkType(); | |||
|  |             return deviceInfo; | |||
|  |         } | |||
|  |         // Get disabled preset properties | |||
|  |         private static List<string> GetDisPresetProperties() | |||
|  |         { | |||
|  |             List<string> properties = new List<string>(); | |||
|  |              | |||
|  |             TextAsset textAsset = Resources.Load<TextAsset>("ta_public_config");  | |||
|  |             if (textAsset != null && textAsset.text != null) | |||
|  |             { | |||
|  |                 XmlDocument xmlDoc = new XmlDocument(); | |||
|  |                 // xmlDoc.Load(srcPath); | |||
|  |                 xmlDoc.LoadXml(textAsset.text); | |||
|  |                 XmlNode root = xmlDoc.SelectSingleNode("resources"); | |||
|  |                 for (int i=0; i<root.ChildNodes.Count; i++) | |||
|  |                 { | |||
|  |                     XmlNode x1 = root.ChildNodes[i]; | |||
|  |                     if (x1.NodeType == XmlNodeType.Element) | |||
|  |                     { | |||
|  |                         XmlElement e1 = x1 as XmlElement; | |||
|  |                         if (e1.HasAttributes)  | |||
|  |                         { | |||
|  |                             string name = e1.GetAttribute("name"); | |||
|  |                             if (name == "TDDisPresetProperties" && e1.HasChildNodes) | |||
|  |                             { | |||
|  |                                 for (int j=0; j<e1.ChildNodes.Count; j++) | |||
|  |                                 { | |||
|  |                                     XmlNode x2 = e1.ChildNodes[j]; | |||
|  |                                     if (x2.NodeType == XmlNodeType.Element) | |||
|  |                                     { | |||
|  |                                         properties.Add(x2.InnerText); | |||
|  |                                     } | |||
|  |                                 } | |||
|  |                             } | |||
|  |                         } | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |             return properties; | |||
|  |         } | |||
|  | 
 | |||
|  |         // A persistent random number, used as an alternative to the distinct ID | |||
|  |         public static string RandomID(bool persistent = true) | |||
|  |         { | |||
|  |             string randomID = null; | |||
|  |             if (persistent) | |||
|  |             { | |||
|  |                 randomID = (string)ThinkingSDKFile.GetData(ThinkingSDKConstant.RANDOM_ID, typeof(string)); | |||
|  |             } | |||
|  |             if (string.IsNullOrEmpty(randomID)) | |||
|  |             { | |||
|  |                 randomID = System.Guid.NewGuid().ToString("N"); | |||
|  |                 if (persistent) | |||
|  |                 { | |||
|  |                     ThinkingSDKFile.SaveData(ThinkingSDKConstant.RANDOM_ID, randomID); | |||
|  |                 } | |||
|  |             } | |||
|  |             return randomID; | |||
|  |         } | |||
|  | 
 | |||
|  |         // Get time zone offset | |||
|  |         public static double ZoneOffset(DateTime dateTime, TimeZoneInfo timeZone) | |||
|  |         { | |||
|  |             bool success = true; | |||
|  |             TimeSpan timeSpan = new TimeSpan(); | |||
|  |             try | |||
|  |             { | |||
|  |                 timeSpan = timeZone.BaseUtcOffset; | |||
|  |             } | |||
|  |             catch (Exception) | |||
|  |             { | |||
|  |                 success = false; | |||
|  |                 //if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("ZoneOffset: TimeSpan get failed : " + e.Message); | |||
|  |             } | |||
|  |             try | |||
|  |             { | |||
|  |                 if (timeZone.IsDaylightSavingTime(dateTime)) | |||
|  |                 { | |||
|  |                     TimeSpan timeSpan1 = TimeSpan.FromHours(1); | |||
|  |                     timeSpan = timeSpan.Add(timeSpan1); | |||
|  |                 } | |||
|  |             } | |||
|  |             catch (Exception) | |||
|  |             { | |||
|  |                 success = false; | |||
|  |                 //if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("ZoneOffset: IsDaylightSavingTime get failed : " + e.Message); | |||
|  |             } | |||
|  |             if (success == false) | |||
|  |             { | |||
|  |                 timeSpan = TimeZone.CurrentTimeZone.GetUtcOffset(dateTime); | |||
|  |             } | |||
|  |             return timeSpan.TotalHours; | |||
|  |         } | |||
|  |         // time formatting | |||
|  |         public static string FormatDate(DateTime dateTime, TimeZoneInfo timeZone) | |||
|  |         { | |||
|  |             bool success = true; | |||
|  |             DateTime univDateTime = dateTime.ToUniversalTime(); | |||
|  |             TimeSpan timeSpan = new TimeSpan(); | |||
|  |             try | |||
|  |             { | |||
|  |                 timeSpan = timeZone.BaseUtcOffset; | |||
|  |             } | |||
|  |             catch (Exception) | |||
|  |             { | |||
|  |                 success = false; | |||
|  |                 //if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("FormatDate - TimeSpan get failed : " + e.Message); | |||
|  |             } | |||
|  |             try | |||
|  |             { | |||
|  |                 if (timeZone.IsDaylightSavingTime(dateTime)) | |||
|  |                 { | |||
|  |                     TimeSpan timeSpan1 = TimeSpan.FromHours(1); | |||
|  |                     timeSpan = timeSpan.Add(timeSpan1); | |||
|  |                 } | |||
|  |             } | |||
|  |             catch (Exception) | |||
|  |             { | |||
|  |                 success = false; | |||
|  |                 //if (ThinkingSDKPublicConfig.IsPrintLog()) ThinkingSDKLogger.Print("FormatDate: IsDaylightSavingTime get failed : " + e.Message); | |||
|  |             } | |||
|  |             if (success == false) | |||
|  |             { | |||
|  |                 timeSpan = TimeZone.CurrentTimeZone.GetUtcOffset(dateTime); | |||
|  |             } | |||
|  |             DateTime dateNew = univDateTime + timeSpan; | |||
|  |             return dateNew.ToString("yyyy-MM-dd HH:mm:ss.fff", System.Globalization.CultureInfo.InvariantCulture); | |||
|  |         } | |||
|  |         // add Dictionary to Dictionary | |||
|  |         public static void AddDictionary(Dictionary<string, object> originalDic, Dictionary<string, object> subDic) | |||
|  |         { | |||
|  |             if (originalDic != subDic) | |||
|  |             { | |||
|  |                 foreach (KeyValuePair<string, object> kv in subDic) | |||
|  |                 { | |||
|  |                     originalDic[kv.Key] = kv.Value; | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  |         //get timestamp | |||
|  |         public static long GetTimeStamp() | |||
|  |         { | |||
|  |             TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); | |||
|  |             return Convert.ToInt64(ts.TotalMilliseconds); | |||
|  |         }      | |||
|  |     } | |||
|  | } |