基于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
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
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
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
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
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
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
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
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