基于TinaX创建一个扩展库

结构

使用

var core = XCore.New()
                .UseVFS().UseI18N().UseUIKit().UseLuaRuntime()
                .UseSDK(new SDKDelegate())
                .UseDownloader()
                .UseNet()
                .OnServicesStartException((service, error) =>
                {

                });
            await core.RunAsync();

SDKConst.cs 用于定义一些常量

namespace TinaX.SDK.Const
{
    public static class SDKConst
    {
        public const string ServiceName = "TinaX.SDK";
        public const string GameObjectName = "SDKManager";
    }
}

ISDK.cs : 用于定义对外的一些接口

namespace TinaX.SDK
{
    public interface ISDK
    {
        void DoInit(string args);
        void DoLogin(string args);
        void DoLogout(string args);
        void DoOrder(string args);
        void DoPay(string args);
        void DoShare(string args);
        void DoTracking(string args);
        void DoExitGame(string args);
        void DoAny(string args);
    }
}

ISDKInternal.cs : 用于定义内部使用的一些接口

using System.Threading.Tasks;
namespace TinaX.SDK.Internal
{
    public interface ISDKInternal
    {
        Task<XException> Start();
        void SetDelegate(ISDKDelegate sdkDelegate);
        void OnNativeCallback(string args);
    }
}

SDKExtend.cs : 基于框架扩展接口

using TinaX.SDK;
namespace TinaX.Services
{
    public static class SDKExtend
    {
        public static IXCore UseSDK(this IXCore core,ISDKDelegate sdkDelegate)
        {
            core.RegisterServiceProvider(new SDKProvider(sdkDelegate));
            return core;
        }
    }
}

SDKFacade.cs 服务门面

namespace TinaX.SDK
{
    public class SDK : CatLib.Facade<ISDK>
    {
        public static ISDK Instance => SDK.That;
        public static ISDK I => SDK.That;
    }
}

SDKProvider.cs 服务提供者

using System.Threading.Tasks;
using TinaX.SDK.Const;
using TinaX.SDK.Internal;
using TinaX.Services;

namespace TinaX.SDK
{
    [XServiceProviderOrder(100)]
    public class SDKProvider : IXServiceProvider
    {
        public string ServiceName => SDKConst.ServiceName;
        private ISDKDelegate _sdkDelegate;
        public SDKProvider(ISDKDelegate sdkDelegate)
        {
            this._sdkDelegate = sdkDelegate;
        }
        public Task<XException> OnInit(IXCore core)
            => Task.FromResult<XException>(null);

        public void OnServiceRegister(IXCore core)
        {
            core.Services.Singleton<ISDK, SDKManager>()
                .SetAlias<ISDKInternal>();
        }

        public Task<XException> OnStart(IXCore core)
        {
            core.Services.Get<ISDKInternal>().SetDelegate(_sdkDelegate);
            return core.Services.Get<ISDKInternal>().Start();
        }


        public void OnQuit() { }

        public Task OnRestart() => Task.CompletedTask;

    }
}

SDKManager.cs 服务接口实现

using System.Threading.Tasks;
using UnityEngine;
using TinaX.SDK.Const;
namespace TinaX.SDK.Internal
{
    public class SDKManager : ISDK, ISDKInternal
    {
        [Inject]
        public IXCore Core { get; set; }
        private ISDKDelegate _sdkDelegate;
        public void DoAny(string args)
        {
            _sdkDelegate?.DoAny(args);
        }

        public void DoExitGame(string args)
        {
            _sdkDelegate?.DoExitGame(args);
        }

        public void DoInit(string args)
        {
            _sdkDelegate?.DoInit(args);
        }

        public void DoLogin(string args)
        {
            _sdkDelegate?.DoLogin(args);
        }

        public void DoLogout(string args)
        {
            _sdkDelegate?.DoLogout(args);
        }

        public void DoOrder(string args)
        {
            _sdkDelegate?.DoOrder(args);
        }

        public void DoPay(string args)
        {
            _sdkDelegate?.DoPay(args);
        }

        public void DoShare(string args)
        {
            _sdkDelegate?.DoShare(args);
        }

        public void DoTracking(string args)
        {
            _sdkDelegate?.DoTracking(args);
        }

        public void OnNativeCallback(string args)
        {
            _sdkDelegate?.OnNativeCallback(args);
        }

        public void SetDelegate(ISDKDelegate sdkDelegate)
        {
            this._sdkDelegate = sdkDelegate;
        }

        public Task<XException> Start()
        {
            var parent = GameObject.Find("TinaX");
            var gameObject = new GameObject(SDKConst.GameObjectName);
            if (parent != null)
            {
                gameObject.SetParent(parent);
            }
            else
            {
                gameObject.DontDestroy();
            }
            var behaviour = gameObject.AddComponent<SDKBehaviour>();
            Core.InjectObject(behaviour);
            Core.CreateInstance(typeof(SDKBehaviour));
            Core.CreateInstanceAndInject(typeof(SDKBehaviour));
            _sdkDelegate?.OnReady();
            return Task.FromResult<XException>(null);
        }
    }
}
© 2017~ 随风逐叶 all right reserved,powered by Gitbook文章修订时间: 2021-07-15 10:39:57

results matching ""

    No results matching ""