ManagerClient.cs 2.8 KB
#if UNITY_IOS
using System;
using AntiAddictionSDK.Common;
using AntiAddictionSDK.Api;
using System.Runtime.InteropServices;
using UnityEngine;

namespace AntiAddictionSDK.iOS
{
    public class ManagerClient : IAntiAddictionClient
    {
        private IntPtr managerPtr;
        private IntPtr managerClientPtr;

        internal delegate void ZAASDKCompletedCallback(IntPtr managerClient);
        internal delegate void ZAASDKCheckPaySuccess(IntPtr managerClient);

        public event EventHandler<EventArgs> ZAASDKCompleted;
        public event EventHandler<EventArgs> ZAASDKCheckPayCompleted;

        public ManagerClient()
        {
            managerClientPtr = (IntPtr)GCHandle.Alloc(this);
            managerPtr = Externs.AACreateManager(managerClientPtr);

            Externs.AASetManagerCallbacks(
                managerPtr,
                sdkCompletedCallback,
                sdkCheckPayCallback
            );
        }

        private IntPtr ManagerPtr
        {
            get
            {
                return ManagerPtr;
            }
            set
            {
                Externs.AARelease(ManagerPtr);
                ManagerPtr = value;
            }
        }

       
        public int IsAuthenticated()
        {
            return Externs.getUserAuthenticationStatus(managerPtr);
        }

        public int AgeGroupOfCurrentUser() 
        {
            return Externs.getUserAgeGroup(managerPtr);
        }

        public int LeftTimeOfCurrentUser()
        {
            return Externs.checkLeftTimeOfCurrentUser(managerPtr);
        }

        public void checkPayWithAmount(String amount)
        {
             Externs.checkPayWithAmount(managerPtr,amount);
        }

        public void recordPayWithAmount(String amount)
        {
             Externs.recordPayWithAmount(managerPtr,amount);
        }

        [MonoPInvokeCallback(typeof(ZAASDKCompletedCallback))]
        private static void sdkCompletedCallback(IntPtr managerClient)
        {
            ManagerClient client = IntPtrToManagerClient(managerClient);
            if (client.ZAASDKCompleted != null)
            {
                client.ZAASDKCompleted(client, EventArgs.Empty);
            }
        }

        [MonoPInvokeCallback(typeof(ZAASDKCheckPaySuccess))]
        private static void sdkCheckPayCallback(IntPtr managerClient)
        {
            ManagerClient client = IntPtrToManagerClient(managerClient);
            if (client.ZAASDKCheckPayCompleted != null)
            {
                client.ZAASDKCheckPayCompleted(client, EventArgs.Empty);
            }
        }

        private static ManagerClient IntPtrToManagerClient(IntPtr managerClient)
        {
            GCHandle handle = (GCHandle)managerClient;

            return handle.Target as ManagerClient;
        }

    }
}
#endif