随风逐叶 随风逐叶
首页
  • Quick Reference (opens new window)
  • EgretEngine开发者文档 (opens new window)
  • TinaX框架
  • SSH教程
  • VSCode插件开发
关于
  • 分类
  • 标签
  • 归档

rontian

从事游戏开发10多年的老菜鸟一枚!
首页
  • Quick Reference (opens new window)
  • EgretEngine开发者文档 (opens new window)
  • TinaX框架
  • SSH教程
  • VSCode插件开发
关于
  • 分类
  • 标签
  • 归档
  • 框架简介
  • TinaX.Core
  • 基于TinaX创建一个扩展库
    • TinaX.VFS
    • TinaX.UIKit
    • TinaX.I18N
    • TinaX.Lua
    • XLua

    • Google.Protobuf
    • Lua-Protobuf
    • 一些优秀的第三方库

    目录

    基于TinaX创建一个扩展库

    # 基于TinaX创建一个扩展库

    # 结构

    # 使用

    var core = XCore.New()
                    .UseVFS().UseI18N().UseUIKit().UseLuaRuntime()
                    .UseSDK(new SDKDelegate())
                    .UseDownloader()
                    .UseNet()
                    .OnServicesStartException((service, error) =>
                    {
    
                    });
                await core.RunAsync();
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # SDKConst.cs 用于定义一些常量

    namespace TinaX.SDK.Const
    {
        public static class SDKConst
        {
            public const string ServiceName = "TinaX.SDK";
            public const string GameObjectName = "SDKManager";
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8

    # 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);
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

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

    using System.Threading.Tasks;
    namespace TinaX.SDK.Internal
    {
        public interface ISDKInternal
        {
            Task<XException> Start();
            void SetDelegate(ISDKDelegate sdkDelegate);
            void OnNativeCallback(string args);
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 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;
            }
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    # SDKFacade.cs 服务门面

    namespace TinaX.SDK
    {
        public class SDK : CatLib.Facade<ISDK>
        {
            public static ISDK Instance => SDK.That;
            public static ISDK I => SDK.That;
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8

    # 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;
    
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38

    # 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);
            }
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    上次更新: 2023/10/17, 14:09:52 访问次数: 0
    TinaX.Core
    TinaX.VFS

    ← TinaX.Core TinaX.VFS→

    最近更新
    01
    一些Shell常用的功能写法整理
    10-20
    02
    删除git仓库submodule的步骤
    10-20
    03
    django基本命令
    10-16
    更多文章>
    Copyright © 2017-2025 随风逐叶
    沪ICP备18008791号-1 | 沪公网安备31011502401077号

    网站访问总次数: 0次
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式