3 Commits
Author SHA1 Message Date
cneicy b27c3911c0 fix: download release SDK directly from Microsoft Blob
Publish NuGet packages / publish (push) Canceled after 0s
Publish UPM package / publish (push) Successful in 2s
2026-11-06 19:26:38 +08:00
cneicy efc0f43b17 feat: update Godot integration and coordinated package dependencies 2026-11-06 19:13:14 +08:00
cneicy b1c42ea4ab fix(bridge): release command service registration ownership
Publish UPM package / publish (push) Successful in 2s
Publish NuGet packages / publish (push) Successful in 4m53s
2026-09-29 10:14:40 +08:00
6 changed files with 34 additions and 22 deletions

No files matched your search

+2 -1
View File
@@ -63,7 +63,8 @@ jobs:
const release = metadata.releases.find(item => item.sdk?.version === sdkVersion);
const file = release?.sdk?.files?.find(item => item.rid === 'linux-x64' && item.name.endsWith('.tar.gz'));
if (!file) throw new Error(`Linux x64 SDK archive not found for ${sdkVersion}`);
const archiveResponse = await fetch(file.url);
const archiveUrl = `https://dotnetcli.blob.core.windows.net/dotnet/Sdk/${sdkVersion}/dotnet-sdk-${sdkVersion}-linux-x64.tar.gz`;
const archiveResponse = await fetch(archiveUrl);
if (!archiveResponse.ok) throw new Error(`SDK download failed: ${archiveResponse.status}`);
await writeFile('/tmp/dotnet-sdk.tar.gz', new Uint8Array(await archiveResponse.arrayBuffer()));
@@ -5,16 +5,16 @@
<AssemblyName>ShrinkCommand.Integration.Network</AssemblyName>
<RootNamespace>ShrinkCommand.Integration</RootNamespace>
<PackageId>ShrinkSDK.Command.Integration.Network</PackageId>
<Version>0.2.0</Version>
<Version>0.2.6</Version>
<Description>ShrinkCommand and Network RPC integration.</Description>
<ShrinkCodeGenEnabled>true</ShrinkCodeGenEnabled>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\*.cs" />
<PackageReference Include="ShrinkSDK.Runtime.Abstractions" Version="0.1.0" />
<PackageReference Include="ShrinkSDK.Context.Core" Version="0.2.0" />
<PackageReference Include="ShrinkSDK.Command" Version="0.3.0" />
<PackageReference Include="ShrinkSDK.Network" Version="0.3.0" />
<PackageReference Include="ShrinkSDK.CodeGen" Version="0.1.0" PrivateAssets="compile;runtime;contentfiles;native" />
<PackageReference Include="ShrinkSDK.Runtime.Abstractions" Version="0.2.0" />
<PackageReference Include="ShrinkSDK.Context.Core" Version="0.3.1" />
<PackageReference Include="ShrinkSDK.Command" Version="0.4.3" />
<PackageReference Include="ShrinkSDK.Network" Version="0.4.3" />
<PackageReference Include="ShrinkSDK.CodeGen" Version="0.2.0" PrivateAssets="compile;runtime;contentfiles;native" />
</ItemGroup>
</Project>
+10
View File
@@ -24,3 +24,13 @@ networkService.UseCommandBridge(commandService);
```csharp
var response = await session.ExecuteCommandAsync("help");
```
## 可复用能力
<!-- shrink:capabilities -->
Capability: 通过 RPC 执行命令,将远端会话映射为命令来源
Aliases: 远程命令 rpc command 控制台
Limits: 仍需校验来源和权限;不能将任意 RPC 当作管理员授权
Extension: 桥接配置与会话来源映射
Evidence: [ShrinkNetworkCommandBridge](ShrinkNetworkCommandBridge.cs)
<!-- /shrink:capabilities -->
+4 -4
View File
@@ -1,7 +1,7 @@
#nullable enable
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using Cysharp.Threading.Tasks;
using ShrinkNetwork;
@@ -12,7 +12,7 @@ namespace ShrinkCommand.Integration
public const string ExecuteRoute = "command/execute";
private static readonly object SyncRoot = new();
private static readonly HashSet<ShrinkNetworkService> RegisteredServices = new();
private static readonly ConditionalWeakTable<ShrinkNetworkService, object> RegisteredServices = new();
public static void RegisterService(
ShrinkNetworkService networkService,
@@ -26,9 +26,9 @@ namespace ShrinkCommand.Integration
lock (SyncRoot)
{
if (RegisteredServices.Contains(networkService))
if (RegisteredServices.TryGetValue(networkService, out _))
return;
RegisteredServices.Add(networkService);
RegisteredServices.Add(networkService, new object());
}
options ??= new ShrinkNetworkCommandBridgeOptions();
+8 -7
View File
@@ -1,5 +1,6 @@
#nullable enable
using System;
using System.Collections;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using NUnit.Framework;
@@ -9,6 +10,7 @@ using ShrinkContext;
using ShrinkDataSaver.Integration.App;
using ShrinkNetwork;
using ShrinkNetwork.Integration.App;
using UnityEngine.TestTools;
namespace ShrinkCommand.Integration.Network.Tests
{
@@ -27,10 +29,10 @@ namespace ShrinkCommand.Integration.Network.Tests
_runtime = new ShrinkContextRuntime();
}
[TearDown]
public void TearDown()
[UnityTearDown]
public IEnumerator TearDown()
{
_runtime.ShutdownAsync().GetAwaiter().GetResult();
yield return _runtime.ShutdownAsync().ToCoroutine();
}
private static void Run(UniTask task) => task.GetAwaiter().GetResult();
@@ -83,16 +85,15 @@ namespace ShrinkCommand.Integration.Network.Tests
ShrinkCommandAppComponent.ServiceKey, out _), "退役撤回服务键");
}
[Test]
public void DataSaverComponent_Activates_FlushesOnDeactivate_WithdrawsKey()
[UnityTest]
public IEnumerator DataSaverComponent_Activates_FlushesOnDeactivate_WithdrawsKey()
{
var fiber = _runtime.Use(new ShrinkDataSaverAppComponent());
Assert.AreEqual(ShrinkFiberState.Active, fiber.State);
Assert.IsTrue(_runtime.TryGetRaw<object>(_runtime.RootContext,
ShrinkDataSaverAppComponent.ServiceKey, out _));
Assert.DoesNotThrow(() => Run(_runtime.RetireAsync(fiber)),
"停用执行补偿式收尾(设置最终落盘;未初始化环境安全跳过)");
yield return _runtime.RetireAsync(fiber).ToCoroutine();
Assert.IsFalse(_runtime.TryGetRaw<object>(_runtime.RootContext,
ShrinkDataSaverAppComponent.ServiceKey, out _));
}
+4 -4
View File
@@ -1,13 +1,13 @@
{
"name": "com.cneicy.shrink-command-integration-network",
"version": "0.2.0",
"version": "0.2.6",
"displayName": "ShrinkCommand - Network Integration",
"description": "ShrinkCommand 与 ShrinkNetwork 的桥接层,允许远程会话通过 RPC 执行命令。",
"unity": "2022.3",
"dependencies": {
"com.cneicy.shrink-command": "0.3.0",
"com.cneicy.shrink-network": "0.3.0",
"com.cneicy.shrink-context-core": "0.2.0"
"com.cneicy.shrink-command": "0.4.3",
"com.cneicy.shrink-network": "0.4.3",
"com.cneicy.shrink-context-core": "0.3.1"
},
"keywords": [
"command",