备份CatanBuilding瘦身独立工程
This commit is contained in:
@@ -0,0 +1,168 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ThinkingData.Analytics.TDException
|
||||
{
|
||||
public class TDExceptionHandler
|
||||
{
|
||||
|
||||
//Whether to exit the program when an exception occurs
|
||||
public static bool IsQuitWhenException = false;
|
||||
|
||||
//Whether the exception catch has been registered
|
||||
public static bool IsRegistered = false;
|
||||
private static TDAutoTrackEventHandler mEventCallback;
|
||||
private static Dictionary<string, object> mProperties;
|
||||
|
||||
|
||||
public static void SetAutoTrackProperties(Dictionary<string, object> properties)
|
||||
{
|
||||
if (!(mProperties is Dictionary<string, object>))
|
||||
{
|
||||
mProperties = new Dictionary<string, object>();
|
||||
}
|
||||
|
||||
foreach (var item in properties)
|
||||
{
|
||||
if (!mProperties.ContainsKey(item.Key))
|
||||
{
|
||||
mProperties.Add(item.Key, item.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void RegisterTAExceptionHandler(TDAutoTrackEventHandler eventCallback)
|
||||
{
|
||||
mEventCallback = eventCallback;
|
||||
//Register exception handling delegate
|
||||
try
|
||||
{
|
||||
if (!IsRegistered)
|
||||
{
|
||||
Application.logMessageReceived += _LogHandler;
|
||||
AppDomain.CurrentDomain.UnhandledException += _UncaughtExceptionHandler;
|
||||
IsRegistered = true;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public static void RegisterTAExceptionHandler(Dictionary<string, object> properties)
|
||||
{
|
||||
SetAutoTrackProperties(properties);
|
||||
//Register exception handling delegate
|
||||
try
|
||||
{
|
||||
if (!IsRegistered)
|
||||
{
|
||||
Application.logMessageReceived += _LogHandler;
|
||||
AppDomain.CurrentDomain.UnhandledException += _UncaughtExceptionHandler;
|
||||
IsRegistered = true;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public static void UnregisterTAExceptionHandler ()
|
||||
{
|
||||
//Clear exception handling delegate
|
||||
try
|
||||
{
|
||||
Application.logMessageReceived -= _LogHandler;
|
||||
System.AppDomain.CurrentDomain.UnhandledException -= _UncaughtExceptionHandler;
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static void _LogHandler( string logString, string stackTrace, LogType type )
|
||||
{
|
||||
if( type == LogType.Error || type == LogType.Exception || type == LogType.Assert )
|
||||
{
|
||||
//Report exception event
|
||||
string reasonStr = "exception_type: " + type.ToString() + " <br> " + "exception_message: " + logString + " <br> " + "stack_trace: " + stackTrace + " <br> " ;
|
||||
Dictionary<string, object> properties = new Dictionary<string, object>(){
|
||||
{"#app_crashed_reason", reasonStr}
|
||||
};
|
||||
properties = MergeProperties(properties);
|
||||
TDAnalytics.Track("ta_app_crash", properties);
|
||||
|
||||
if ( IsQuitWhenException )
|
||||
{
|
||||
Application.Quit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void _UncaughtExceptionHandler (object sender, System.UnhandledExceptionEventArgs args)
|
||||
{
|
||||
if (args == null || args.ExceptionObject == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (args.ExceptionObject.GetType () != typeof(System.Exception))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
System.Exception e = (System.Exception)args.ExceptionObject;
|
||||
|
||||
//Report exception event
|
||||
string reasonStr = "exception_type: " + e.GetType().Name + " <br> " + "exception_message: " + e.Message + " <br> " + "stack_trace: " + e.StackTrace + " <br> " ;
|
||||
Dictionary<string, object> properties = new Dictionary<string, object>(){
|
||||
{"#app_crashed_reason", reasonStr}
|
||||
};
|
||||
properties = MergeProperties(properties);
|
||||
TDAnalytics.Track("ta_app_crash", properties);
|
||||
|
||||
if ( IsQuitWhenException )
|
||||
{
|
||||
Application.Quit();
|
||||
}
|
||||
}
|
||||
|
||||
private static Dictionary<string, object> MergeProperties(Dictionary<string, object> properties)
|
||||
{
|
||||
|
||||
if (mEventCallback is TDAutoTrackEventHandler)
|
||||
{
|
||||
Dictionary<string, object> callbackProperties = mEventCallback.GetAutoTrackEventProperties((int)TDAutoTrackEventType.AppCrash, properties);
|
||||
foreach (var item in callbackProperties)
|
||||
{
|
||||
if (!properties.ContainsKey(item.Key))
|
||||
{
|
||||
properties.Add(item.Key, item.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mProperties is Dictionary<string, object>)
|
||||
{
|
||||
foreach (var item in mProperties)
|
||||
{
|
||||
if (!properties.ContainsKey(item.Key))
|
||||
{
|
||||
properties.Add(item.Key, item.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return properties;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 76f285e49c9584fce99e9fe1536fea17
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user