This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
name: Publish UPM package
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.SHRINKSDK_PACKAGE_TOKEN }}
|
||||
steps:
|
||||
- name: Fetch tagged revision
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
ref="${{ gitea.sha }}"
|
||||
test -n "$ref"
|
||||
git init .
|
||||
git remote add origin "https://git.crash.work/ShrinkSDK/ShrinkNetwork.Integration.App.git"
|
||||
git fetch --depth=1 origin "$ref"
|
||||
git checkout --detach FETCH_HEAD
|
||||
|
||||
- name: Validate immutable release version
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
tag="$(git describe --exact-match --tags HEAD)"
|
||||
version="$(node -p "require('./package.json').version")"
|
||||
test "$tag" = "v$version"
|
||||
npm pack --dry-run
|
||||
|
||||
- name: Publish to ShrinkSDK registry
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
: "${NODE_AUTH_TOKEN:?SHRINKSDK_PACKAGE_TOKEN is required}"
|
||||
npmrc="$HOME/.npmrc"
|
||||
cleanup() { rm -f "$npmrc"; }
|
||||
trap cleanup EXIT
|
||||
printf '%s\n' \
|
||||
'registry=https://git.crash.work/api/packages/ShrinkSDK/npm/' \
|
||||
'//git.crash.work/api/packages/ShrinkSDK/npm/:_authToken=${NODE_AUTH_TOKEN}' > "$npmrc"
|
||||
npm publish --registry=https://git.crash.work/api/packages/ShrinkSDK/npm/
|
||||
@@ -0,0 +1,39 @@
|
||||
name: Verify standalone Unity package
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
editmode:
|
||||
runs-on: unity-2022.3.62f3
|
||||
container:
|
||||
image: docker.1panel.live/unityci/editor:ubuntu-2022.3.62f3-windows-mono-3
|
||||
volumes:
|
||||
- /www/dk_project/bt-recovery/gitea/runner/seedskey-unity-license:/root/.local/share/unity3d/Unity
|
||||
- /www/dk_project/bt-recovery/gitea/runner/seedskey-unity-entitlements:/root/.config/unity3d/Unity/licenses
|
||||
steps:
|
||||
- name: Fetch selected revision
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
ref="${{ gitea.sha }}"
|
||||
git init .
|
||||
git remote add origin "https://git.crash.work/ShrinkSDK/ShrinkNetwork.Integration.App.git"
|
||||
git fetch --depth=1 origin "$ref"
|
||||
git checkout --detach FETCH_HEAD
|
||||
|
||||
- name: Run package EditMode tests
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
unity_bin="$(command -v unity-editor || command -v unity || command -v Unity || true)"
|
||||
test -n "$unity_bin"
|
||||
"$unity_bin" \
|
||||
-batchmode \
|
||||
-nographics \
|
||||
-quit \
|
||||
-projectPath "$PWD/Development~/UnityProject" \
|
||||
-runTests \
|
||||
-testPlatform EditMode \
|
||||
-testResults "$PWD/TestResults/editmode.xml" \
|
||||
-logFile "$PWD/TestResults/unity.log"
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
/Development~/UnityProject/[Ll]ibrary/
|
||||
/Development~/UnityProject/[Tt]emp/
|
||||
/Development~/UnityProject/[Oo]bj/
|
||||
/Development~/UnityProject/[Ll]ogs/
|
||||
/Development~/UnityProject/[Uu]ser[Ss]ettings/
|
||||
/Development~/UnityProject/TestResults/
|
||||
/Tools~/**/[Bb]in/
|
||||
/Tools~/**/[Oo]bj/
|
||||
*.user
|
||||
*.DotSettings.user
|
||||
@@ -0,0 +1,8 @@
|
||||
.git/
|
||||
.gitea/
|
||||
Development~/
|
||||
Tools~/
|
||||
*.csproj
|
||||
*.sln
|
||||
*.user
|
||||
*.DotSettings.user
|
||||
@@ -0,0 +1,11 @@
|
||||
# Changelog
|
||||
|
||||
本文件记录 `ShrinkNetwork.Integration.App` 的包内变更。
|
||||
|
||||
## [0.1.0] - 2026-05-18
|
||||
|
||||
### Added
|
||||
|
||||
- 新增 `ShrinkNetwork` 与 `ShrinkApp.Core` 的桥接包。
|
||||
- 新增 `ShrinkNetworkAppInstaller`,把默认网络服务挂入宿主服务容器。
|
||||
- 新增 `ShrinkNetworkAppService` 作为宿主侧网络门面。
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 12ec7a42482c6dc4b969870ad23daffc
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,6 @@
|
||||
[Ll]ibrary/
|
||||
[Tt]emp/
|
||||
[Oo]bj/
|
||||
[Ll]ogs/
|
||||
[Uu]ser[Ss]ettings/
|
||||
TestResults/
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"scopedRegistries": [
|
||||
{
|
||||
"name": "ShrinkSDK",
|
||||
"url": "https://git.crash.work/api/packages/ShrinkSDK/npm/",
|
||||
"scopes": [
|
||||
"com.cneicy"
|
||||
]
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"com.unity.test-framework": "1.1.33",
|
||||
"com.cneicy.shrink-network-integration-app": "file:../../.."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
m_EditorVersion: 2022.3.62f3
|
||||
m_EditorVersionWithRevision: 2022.3.62f3 (96770f904ca7)
|
||||
@@ -0,0 +1,23 @@
|
||||
# ShrinkNetwork.Integration.App
|
||||
|
||||
`ShrinkNetwork.Integration.App` 是 `ShrinkNetwork` 与 `ShrinkApp.Core` 的桥接层。它负责把默认网络服务挂进宿主服务容器,让项目在进入统一宿主模式后,能明确地从 `ShrinkApp` 取得网络服务,而不是在各处直接耦合 `ShrinkNetworkRuntime.Default`。
|
||||
|
||||
## 当前能力
|
||||
|
||||
- 提供原生 `ShrinkNetworkAppComponent`,发布 `shrink.service.network`
|
||||
- 把 `ShrinkNetworkRuntime.Default` 包装为 `ShrinkNetworkAppService`
|
||||
- ContextLoader 下由 Starter 组合根装配,服务门面随组件停用可逆注销
|
||||
- `ShrinkNetworkAppInstaller` 仅保留给 ClassicHost 兼容路径,已标记过时
|
||||
|
||||
## 使用示例
|
||||
|
||||
```csharp
|
||||
var network = ShrinkApp.ShrinkApp.Services.GetRequired<ShrinkNetwork.Integration.App.ShrinkNetworkAppService>();
|
||||
var service = network.Service;
|
||||
```
|
||||
|
||||
## 说明
|
||||
|
||||
- 本包当前不主动绑定传输层,也不替业务决定 TCP / KCP / Loopback。
|
||||
- 静态消息合同与静态 handler 的默认注册仍由 `ShrinkNetworkRuntime.Default` 完成。
|
||||
- 运行时实例 handler 仍然走 `RegisterHandlers(object target)`。
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 00f656bae7782f54fa051900ddc0575c
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 13a446f2618993d4f84f800c349a6306
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "ShrinkNetwork.Integration.App",
|
||||
"rootNamespace": "ShrinkNetwork.Integration.App",
|
||||
"references": [
|
||||
"ShrinkNetwork.Runtime",
|
||||
"ShrinkApp.Core.Runtime",
|
||||
"ShrinkContext.Core.Runtime",
|
||||
"UniTask"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6396a2709306e6245892177071b1c3f2
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,89 @@
|
||||
#nullable enable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using ShrinkContext;
|
||||
using ShrinkNetwork;
|
||||
using UnityEngine;
|
||||
|
||||
namespace ShrinkNetwork.Integration.App
|
||||
{
|
||||
/// <summary>ShrinkNetwork 组件的配置。</summary>
|
||||
public sealed class ShrinkNetworkAppModuleConfig
|
||||
{
|
||||
/// <summary>是否在激活时自动绑定 loopback 传输并打开默认会话(演示/调试台用)。</summary>
|
||||
public bool BindLoopbackTransport;
|
||||
|
||||
public int LoopbackSessionId = 1;
|
||||
|
||||
/// <summary>可选:把网络服务同时注册进 ShrinkApp 服务容器(兼容旧调试台读取路径)。</summary>
|
||||
public ShrinkApp.ShrinkAppServices? Services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ShrinkNetwork 的原生 Cordis 组件(阶段 3):
|
||||
/// - 提供 <c>shrink.service.network</c> 余效应键(服务实例),依赖者按键注入;
|
||||
/// - 可选的 loopback 传输绑定是**可逆效应**:停用时解绑传输、清理会话并使挂起 RPC 失败——
|
||||
/// 全部由效应回滚完成,而非手写卸载路径;
|
||||
/// - 与经典 ShrinkNetworkAppInstaller(ModuleId "shrink.network")二选一使用:
|
||||
/// 两者都发布 "app.module.shrink.network",同时激活会触发供给冲突。
|
||||
/// </summary>
|
||||
public sealed class ShrinkNetworkAppComponent : IShrinkComponent
|
||||
{
|
||||
public const string ServiceKey = "shrink.service.network";
|
||||
public const string ModuleKey = "app.module.shrink.network";
|
||||
|
||||
private static readonly string[] ProvideKeys = { ModuleKey, ServiceKey };
|
||||
|
||||
public string Name => "shrink.network";
|
||||
|
||||
public IReadOnlyList<string> Inject => Array.Empty<string>();
|
||||
|
||||
public IReadOnlyList<string> Provide => ProvideKeys;
|
||||
|
||||
public async UniTask ApplyAsync(ShrinkCtx ctx, object? config)
|
||||
{
|
||||
var moduleConfig = config as ShrinkNetworkAppModuleConfig ?? new ShrinkNetworkAppModuleConfig();
|
||||
var service = ShrinkNetworkRuntime.Default;
|
||||
|
||||
// set 是可逆效应:停用自动撤回服务键,依赖者随之停用
|
||||
ctx.Set(ServiceKey, service);
|
||||
var facade = new ShrinkNetworkAppService(service);
|
||||
moduleConfig.Services?.Register(facade);
|
||||
if (config is ShrinkApp.ShrinkAppServices appServices)
|
||||
{
|
||||
appServices.Register(facade);
|
||||
ctx.EffectInverse(() =>
|
||||
{
|
||||
appServices.TryUnregister(facade);
|
||||
return UniTask.CompletedTask;
|
||||
});
|
||||
}
|
||||
ctx.Set(ModuleKey, Name);
|
||||
|
||||
if (moduleConfig.BindLoopbackTransport)
|
||||
{
|
||||
await ctx.EffectAsync(() => BindLoopbackAsync(service, moduleConfig.LoopbackSessionId));
|
||||
}
|
||||
}
|
||||
|
||||
private static async UniTask<Func<UniTask>> BindLoopbackAsync(ShrinkNetworkService service, int sessionId)
|
||||
{
|
||||
var client = new ShrinkLoopbackTransport();
|
||||
var server = new ShrinkLoopbackTransport();
|
||||
client.LinkPeer(server);
|
||||
|
||||
service.BindTransport(client);
|
||||
client.OpenSession(sessionId);
|
||||
await UniTask.CompletedTask;
|
||||
|
||||
return () =>
|
||||
{
|
||||
// 逆操作:关闭会话并解绑传输;BindTransport(null) 触发会话清理与挂起 RPC 失败
|
||||
client.CloseSession(sessionId);
|
||||
service.BindTransport(null);
|
||||
return UniTask.CompletedTask;
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f956f1f1465b7c749844f59dfd12412a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,49 @@
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using ShrinkApp;
|
||||
|
||||
namespace ShrinkNetwork.Integration.App
|
||||
{
|
||||
[ShrinkAppModuleInstaller]
|
||||
[Obsolete("ClassicHost compatibility only. ContextLoader projects should use ShrinkNetworkAppComponent from a composition root.")]
|
||||
public sealed class ShrinkNetworkAppInstaller : IShrinkAppModuleInstaller
|
||||
{
|
||||
public string ModuleId => "shrink.network";
|
||||
public int Order => -1400;
|
||||
public System.Collections.Generic.IReadOnlyList<string> DependsOn => Array.Empty<string>();
|
||||
|
||||
public void RegisterServices(ShrinkAppContext context)
|
||||
{
|
||||
context.Services.Register(new ShrinkNetworkAppService(ShrinkNetworkRuntime.Default));
|
||||
}
|
||||
|
||||
public UniTask InitializeAsync(ShrinkAppContext context)
|
||||
{
|
||||
return UniTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class ShrinkNetworkAppService
|
||||
{
|
||||
public ShrinkNetworkAppService(ShrinkNetworkService service)
|
||||
{
|
||||
Service = service ?? throw new ArgumentNullException(nameof(service));
|
||||
}
|
||||
|
||||
public ShrinkNetworkService Service { get; }
|
||||
|
||||
public ShrinkNetworkServiceDiagnosticsSnapshot GetDiagnosticsSnapshot()
|
||||
=> Service.GetDiagnosticsSnapshot();
|
||||
|
||||
public System.Collections.Generic.IReadOnlyList<string> GetSessionSummaries()
|
||||
{
|
||||
return Service.Sessions.Values
|
||||
.OrderBy(session => session.SessionId)
|
||||
.Select(session => $"session={session.SessionId}, remote={session.RemoteAddress}, peer={session.PeerKind}")
|
||||
.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ff40e733ef9026441b4698e55e421922
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 200fb1bcdd99fe34cb64508bd1e24c66
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "ShrinkNetwork.Integration.App.Tests",
|
||||
"rootNamespace": "ShrinkNetwork.Integration.App.Tests",
|
||||
"references": [
|
||||
"ShrinkNetwork.Integration.App",
|
||||
"ShrinkNetwork.Runtime",
|
||||
"ShrinkContext.Core.Runtime",
|
||||
"ShrinkApp.Core.Runtime",
|
||||
"UniTask",
|
||||
"UnityEngine.TestRunner",
|
||||
"UnityEditor.TestRunner"
|
||||
],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"autoReferenced": false,
|
||||
"defineConstraints": [
|
||||
"UNITY_INCLUDE_TESTS"
|
||||
],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d64f2336fac149741b1d481059053715
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,98 @@
|
||||
#nullable enable
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using NUnit.Framework;
|
||||
using ShrinkContext;
|
||||
using ShrinkNetwork;
|
||||
|
||||
namespace ShrinkNetwork.Integration.App.Tests
|
||||
{
|
||||
/// <summary>
|
||||
/// 阶段 3 验收(EditMode 部分):Network 组件热插拔——
|
||||
/// 停用时传输解绑、会话清理、服务键撤回、依赖者停用,全部为效应回滚结果。
|
||||
/// </summary>
|
||||
public class ShrinkNetworkAppComponentTests
|
||||
{
|
||||
private ShrinkContextRuntime _runtime = null!;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_runtime = new ShrinkContextRuntime();
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
_runtime.ShutdownAsync().GetAwaiter().GetResult();
|
||||
}
|
||||
|
||||
private static void Run(UniTask task) => task.GetAwaiter().GetResult();
|
||||
|
||||
[Test]
|
||||
public void Apply_ProvidesServiceKey_AndBindsLoopbackWithSession()
|
||||
{
|
||||
var sessionsBefore = ShrinkNetworkRuntime.Default.Sessions.Count;
|
||||
var fiber = _runtime.Use(new ShrinkNetworkAppComponent(),
|
||||
new ShrinkNetworkAppModuleConfig { BindLoopbackTransport = true, LoopbackSessionId = 7 });
|
||||
|
||||
Assert.AreEqual(ShrinkFiberState.Active, fiber.State);
|
||||
Assert.IsTrue(_runtime.TryGetRaw<ShrinkNetworkService>(_runtime.RootContext,
|
||||
ShrinkNetworkAppComponent.ServiceKey, out var service));
|
||||
Assert.AreSame(ShrinkNetworkRuntime.Default, service);
|
||||
Assert.AreEqual(sessionsBefore + 1, service.Sessions.Count, "loopback 绑定应新建一个会话");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Retire_UnbindsTransport_ClearsSessions_AndStopsDependents()
|
||||
{
|
||||
var sessionsBefore = ShrinkNetworkRuntime.Default.Sessions.Count;
|
||||
var consumerFiber = _runtime.Use(new ServiceConsumerComponent());
|
||||
Assert.AreEqual(ShrinkFiberState.Inactive, consumerFiber.State, "网络服务未提供前依赖者等待");
|
||||
|
||||
var networkFiber = _runtime.Use(new ShrinkNetworkAppComponent(),
|
||||
new ShrinkNetworkAppModuleConfig { BindLoopbackTransport = true });
|
||||
Assert.AreEqual(ShrinkFiberState.Active, networkFiber.State);
|
||||
Assert.AreEqual(ShrinkFiberState.Active, consumerFiber.State, "服务键发布后依赖者激活");
|
||||
|
||||
Run(_runtime.RetireAsync(networkFiber));
|
||||
|
||||
Assert.AreEqual(sessionsBefore, ShrinkNetworkRuntime.Default.Sessions.Count,
|
||||
"停用必须解绑传输并清理自己的会话(效应回滚,非手写卸载;不影响他人遗留会话)");
|
||||
Assert.IsFalse(_runtime.TryGetRaw<ShrinkNetworkService>(_runtime.RootContext,
|
||||
ShrinkNetworkAppComponent.ServiceKey, out _), "服务键随 set 的逆操作撤回");
|
||||
Assert.AreEqual(ShrinkFiberState.Inactive, consumerFiber.State, "依赖者随提供者停用");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Reactivate_RebindsLoopback()
|
||||
{
|
||||
var sessionsBefore = ShrinkNetworkRuntime.Default.Sessions.Count;
|
||||
var first = _runtime.Use(new ShrinkNetworkAppComponent(),
|
||||
new ShrinkNetworkAppModuleConfig { BindLoopbackTransport = true });
|
||||
Run(_runtime.RetireAsync(first));
|
||||
Assert.AreEqual(sessionsBefore, ShrinkNetworkRuntime.Default.Sessions.Count);
|
||||
|
||||
var second = _runtime.Use(new ShrinkNetworkAppComponent(),
|
||||
new ShrinkNetworkAppModuleConfig { BindLoopbackTransport = true });
|
||||
Assert.AreEqual(ShrinkFiberState.Active, second.State);
|
||||
Assert.AreEqual(sessionsBefore + 1, ShrinkNetworkRuntime.Default.Sessions.Count, "重新激活重新绑定传输");
|
||||
}
|
||||
|
||||
/// <summary>注入网络服务键的消费者组件。</summary>
|
||||
private sealed class ServiceConsumerComponent : IShrinkComponent
|
||||
{
|
||||
public string Name => "network-consumer";
|
||||
public IReadOnlyList<string> Inject { get; } = new[] { ShrinkNetworkAppComponent.ServiceKey };
|
||||
public IReadOnlyList<string> Provide => Array.Empty<string>();
|
||||
public ShrinkNetworkService? Seen { get; private set; }
|
||||
|
||||
public UniTask ApplyAsync(ShrinkCtx ctx, object? config)
|
||||
{
|
||||
Seen = ctx.Get<ShrinkNetworkService>(ShrinkNetworkAppComponent.ServiceKey);
|
||||
return UniTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 490be582f048d0d4ea468903e7326aac
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "com.cneicy.shrink-network-integration-app",
|
||||
"version": "0.1.0",
|
||||
"displayName": "ShrinkNetwork - App Integration",
|
||||
"description": "ShrinkNetwork 与 ShrinkApp 的桥接层,把默认网络服务纳入统一宿主服务容器。",
|
||||
"unity": "2022.3",
|
||||
"dependencies": {
|
||||
"com.cneicy.shrink-network": "0.2.0",
|
||||
"com.cneicy.shrink-app-core": "0.1.1",
|
||||
"com.cysharp.unitask": "2.5.10",
|
||||
"com.cneicy.shrink-context-core": "0.1.0"
|
||||
},
|
||||
"keywords": [
|
||||
"network",
|
||||
"integration",
|
||||
"app",
|
||||
"rpc"
|
||||
],
|
||||
"author": {
|
||||
"name": "cneicy",
|
||||
"url": "https://git.crash.work/ShrinkSDK"
|
||||
},
|
||||
"documentationUrl": "https://git.crash.work/ShrinkSDK/ShrinkNetwork.Integration.App",
|
||||
"changelogUrl": "https://git.crash.work/ShrinkSDK/ShrinkNetwork.Integration.App/src/branch/main/CHANGELOG.md"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b37c0ec21665ffb4abd20c33356ec649
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user