152 lines
5.9 KiB
C#
152 lines
5.9 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT license.
|
|
|
|
#if UNITY_IOS && !UNITY_EDITOR
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.InteropServices;
|
|
using AOT;
|
|
using Microsoft.AppCenter.Unity.Crashes;
|
|
using Microsoft.AppCenter.Unity.Internal.Utility;
|
|
|
|
namespace Microsoft.AppCenter.Unity.Crashes.Internal
|
|
{
|
|
public class CrashesDelegate
|
|
{
|
|
static CrashesDelegate()
|
|
{
|
|
app_center_unity_crashes_delegate_set_should_process_error_report_delegate(ShouldProcessErrorReportNativeFunc);
|
|
app_center_unity_crashes_delegate_set_get_error_attachments_delegate(GetErrorAttachmentsNativeFunc);
|
|
app_center_unity_crashes_delegate_set_sending_error_report_delegate(SendingErrorReportNativeFunc);
|
|
app_center_unity_crashes_delegate_set_sent_error_report_delegate(SentErrorReportNativeFunc);
|
|
app_center_unity_crashes_delegate_set_failed_to_send_error_report_delegate(FailedToSendErrorReportNativeFunc);
|
|
}
|
|
|
|
public static void SetDelegate()
|
|
{
|
|
app_center_unity_crashes_set_delegate();
|
|
}
|
|
|
|
#if ENABLE_IL2CPP
|
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
|
#endif
|
|
public delegate bool NativeShouldProcessErrorReportDelegate(IntPtr report);
|
|
private static Crashes.ShouldProcessErrorReportHandler shouldProcessReportHandler;
|
|
|
|
[MonoPInvokeCallback(typeof(NativeShouldProcessErrorReportDelegate))]
|
|
public static bool ShouldProcessErrorReportNativeFunc(IntPtr report)
|
|
{
|
|
if (shouldProcessReportHandler != null)
|
|
{
|
|
ErrorReport errorReport = CrashesInternal.GetErrorReportFromIntPtr(report);
|
|
return shouldProcessReportHandler(errorReport);
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public static void SetShouldProcessErrorReportHandler(Crashes.ShouldProcessErrorReportHandler handler)
|
|
{
|
|
shouldProcessReportHandler = handler;
|
|
}
|
|
|
|
#if ENABLE_IL2CPP
|
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
|
#endif
|
|
public delegate IntPtr NativeGetErrorAttachmentsDelegate(IntPtr report);
|
|
internal static Crashes.GetErrorAttachmentsHandler GetErrorAttachmentsHandler;
|
|
|
|
[MonoPInvokeCallback(typeof(NativeGetErrorAttachmentsDelegate))]
|
|
public static IntPtr GetErrorAttachmentsNativeFunc(IntPtr report)
|
|
{
|
|
if (GetErrorAttachmentsHandler == null)
|
|
{
|
|
return IntPtr.Zero;
|
|
}
|
|
var errorReport = CrashesInternal.GetErrorReportFromIntPtr(report);
|
|
var logs = GetErrorAttachmentsHandler(errorReport);
|
|
return NativeObjectsConverter.ToNativeAttachments(logs);
|
|
}
|
|
|
|
public static void SetGetErrorAttachmentsHandler(Crashes.GetErrorAttachmentsHandler handler)
|
|
{
|
|
GetErrorAttachmentsHandler = handler;
|
|
}
|
|
|
|
#if ENABLE_IL2CPP
|
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
|
#endif
|
|
public delegate void NativeSendingErrorReportDelegate(IntPtr report);
|
|
public static event Crashes.SendingErrorReportHandler SendingErrorReport;
|
|
|
|
[MonoPInvokeCallback(typeof(NativeSendingErrorReportDelegate))]
|
|
public static void SendingErrorReportNativeFunc(IntPtr report)
|
|
{
|
|
if (SendingErrorReport != null)
|
|
{
|
|
ErrorReport errorReport = CrashesInternal.GetErrorReportFromIntPtr(report);
|
|
SendingErrorReport(errorReport);
|
|
}
|
|
}
|
|
|
|
#if ENABLE_IL2CPP
|
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
|
#endif
|
|
public delegate void NativeSentErrorReportDelegate(IntPtr report);
|
|
public static event Crashes.SentErrorReportHandler SentErrorReport;
|
|
|
|
[MonoPInvokeCallback(typeof(NativeSentErrorReportDelegate))]
|
|
public static void SentErrorReportNativeFunc(IntPtr report)
|
|
{
|
|
if (SentErrorReport != null)
|
|
{
|
|
ErrorReport errorReport = CrashesInternal.GetErrorReportFromIntPtr(report);
|
|
SentErrorReport(errorReport);
|
|
}
|
|
}
|
|
|
|
#if ENABLE_IL2CPP
|
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
|
#endif
|
|
public delegate void NativeFailedToSendErrorReportDelegate(IntPtr report, IntPtr error);
|
|
public static event Crashes.FailedToSendErrorReportHandler FailedToSendErrorReport;
|
|
|
|
[MonoPInvokeCallback(typeof(NativeFailedToSendErrorReportDelegate))]
|
|
public static void FailedToSendErrorReportNativeFunc(IntPtr report, IntPtr error)
|
|
{
|
|
if (FailedToSendErrorReport != null)
|
|
{
|
|
var errorReport = CrashesInternal.GetErrorReportFromIntPtr(report);
|
|
var exception = NSErrorHelper.Convert(error);
|
|
FailedToSendErrorReport(errorReport, exception);
|
|
}
|
|
}
|
|
|
|
#region External
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void app_center_unity_crashes_set_delegate();
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void app_center_unity_crashes_delegate_set_should_process_error_report_delegate(NativeShouldProcessErrorReportDelegate functionPtr);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void app_center_unity_crashes_delegate_set_get_error_attachments_delegate(NativeGetErrorAttachmentsDelegate functionPtr);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void app_center_unity_crashes_delegate_set_sending_error_report_delegate(NativeSendingErrorReportDelegate functionPtr);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void app_center_unity_crashes_delegate_set_sent_error_report_delegate(NativeSentErrorReportDelegate functionPtr);
|
|
|
|
[DllImport("__Internal")]
|
|
private static extern void app_center_unity_crashes_delegate_set_failed_to_send_error_report_delegate(NativeFailedToSendErrorReportDelegate functionPtr);
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|
|
#endif
|