#if UNITY_IOS //&& !UNITY_EDITOR using System; using System.Runtime.InteropServices; using Azerion.BlueStack.API; using Azerion.BlueStack.Internal; namespace Azerion.BlueStack.Platforms.iOS { public class BlueStackClient : IBlueStackClient { public static BlueStackClient Instance { get; } = new BlueStackClient(); private Action _sdkInitCompleteAction; private Action _adaptersInitCompleteAction; private IntPtr _iOSAdsClientPtr; internal delegate void BSUSDKInitializationCompleteCallback(IntPtr iOSAdsClient, bool success, IntPtr error); internal delegate void BSUInitializationCompleteCallback(IntPtr iOSAdsClient, IntPtr initStatusClient); //internal delegate void BSUAdaptersInitializationCompleteCallback(IntPtr iOSAdsClient, IntPtr initStatusClient); private BlueStackClient() { this._iOSAdsClientPtr = (IntPtr)GCHandle.Alloc(this); } public void Initialize(string appId, Settings settings, Action sdkInitCompleteAction, Action adaptersInitCompleteAction = null) { this._sdkInitCompleteAction = sdkInitCompleteAction; this._adaptersInitCompleteAction = adaptersInitCompleteAction; IntPtr settingsPtr = Utils.BuildSettings(settings); Externs.BSUInitializeWithCallback(this._iOSAdsClientPtr, appId, settingsPtr, SDKInitializationCompleteCallback, AdaptersInitializationCompleteCallback); } [AOT.MonoPInvokeCallback(typeof(BSUSDKInitializationCompleteCallback))] private static void SDKInitializationCompleteCallback(IntPtr iOSAdsClient, bool success, IntPtr error) { BlueStackClient client = IntPtrToAdsClient(iOSAdsClient); if (client._sdkInitCompleteAction != null) { BlueStackError bsError = BlueStackErrorUtils.CreateFromIntPtr(error); SDKInitializationStatus status = new SDKInitializationStatus(success, bsError.Message); client._sdkInitCompleteAction(status); } } [AOT.MonoPInvokeCallback(typeof(BSUInitializationCompleteCallback))] private static void AdaptersInitializationCompleteCallback(IntPtr iOSAdsClient, IntPtr initStatus) { BlueStackClient client = IntPtrToAdsClient(iOSAdsClient); if (client._adaptersInitCompleteAction != null) { IInitializationStatusClient statusClient = new InitializationStatusClient(initStatus); client._adaptersInitCompleteAction(statusClient); } } private static BlueStackClient IntPtrToAdsClient(IntPtr iOSAdsClientPtr) { GCHandle handle = (GCHandle)iOSAdsClientPtr; return handle.Target as BlueStackClient; } private void Dispose() { ((GCHandle)this._iOSAdsClientPtr).Free(); } ~BlueStackClient() { this.Dispose(); } } } #endif