From 29a630564d7b251a943e5911673054e99b913015 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 23:53:14 +0000 Subject: [PATCH 1/3] Initial plan From e453bb5f5a917d00a72ed4c118b564103e178c1a Mon Sep 17 00:00:00 2001 From: Manuel Pazzaglini Date: Wed, 18 Feb 2026 00:34:27 +0100 Subject: [PATCH 2/3] Migrate to ActualLab.Rpc + Fix DLL Hell (ConnectionReset) --- .gitignore | 4 +++ plugin_Relay.sln | 26 +++++++++++++++++ plugin_Relay/Models/Contract.cs | 2 +- plugin_Relay/RelayDevice.cs | 48 +++++++++++++------------------- plugin_Relay/RelayService.cs | 16 ++--------- plugin_Relay/plugin_Relay.csproj | 10 +++++-- 6 files changed, 59 insertions(+), 47 deletions(-) diff --git a/.gitignore b/.gitignore index f94daeb..4b13570 100644 --- a/.gitignore +++ b/.gitignore @@ -57,8 +57,12 @@ BenchmarkDotNet.Artifacts/ # .NET Core project.lock.json +RelayTestServer/ project.fragment.lock.json artifacts/ +publish_ms_out/ +publish_out/ +*.zip # StyleCop StyleCopReport.xml diff --git a/plugin_Relay.sln b/plugin_Relay.sln index 8863d0e..50befc7 100644 --- a/plugin_Relay.sln +++ b/plugin_Relay.sln @@ -10,16 +10,42 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .editorconfig = .editorconfig EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RelayTestServer", "RelayTestServer\RelayTestServer.csproj", "{91A955FC-0A91-4DD9-80A4-B0E79205B357}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 + Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 Release|x64 = Release|x64 + Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Debug|x64.ActiveCfg = Debug|x64 {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Debug|x64.Build.0 = Debug|x64 + {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Debug|x86.ActiveCfg = Debug|Any CPU + {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Debug|x86.Build.0 = Debug|Any CPU {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Release|x64.ActiveCfg = Release|x64 {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Release|x64.Build.0 = Release|x64 + {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Release|Any CPU.Build.0 = Release|Any CPU + {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Release|x86.ActiveCfg = Release|Any CPU + {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Release|x86.Build.0 = Release|Any CPU + {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Debug|x64.ActiveCfg = Debug|Any CPU + {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Debug|x64.Build.0 = Debug|Any CPU + {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Debug|Any CPU.Build.0 = Debug|Any CPU + {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Debug|x86.ActiveCfg = Debug|Any CPU + {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Debug|x86.Build.0 = Debug|Any CPU + {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Release|x64.ActiveCfg = Release|Any CPU + {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Release|x64.Build.0 = Release|Any CPU + {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Release|Any CPU.ActiveCfg = Release|Any CPU + {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Release|Any CPU.Build.0 = Release|Any CPU + {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Release|x86.ActiveCfg = Release|Any CPU + {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/plugin_Relay/Models/Contract.cs b/plugin_Relay/Models/Contract.cs index 475ea84..a097fbd 100644 --- a/plugin_Relay/Models/Contract.cs +++ b/plugin_Relay/Models/Contract.cs @@ -6,7 +6,7 @@ using Amethyst.Plugins.Contract; using MemoryPack; using Microsoft.Extensions.Logging; -using Stl.Rpc; +using ActualLab.Rpc; namespace plugin_Relay.Models; diff --git a/plugin_Relay/RelayDevice.cs b/plugin_Relay/RelayDevice.cs index 5f34574..b38d048 100644 --- a/plugin_Relay/RelayDevice.cs +++ b/plugin_Relay/RelayDevice.cs @@ -16,7 +16,7 @@ using plugin_Relay.Models; using plugin_Relay.Pages; using Microsoft.Extensions.Logging; -using Stl.Rpc; +using ActualLab.Rpc; // To learn more about WinUI, the WinUI project structure, // and more about our project templates, see: http://aka.ms/winui-project-info. @@ -169,39 +169,29 @@ public void Initialize() // Mark as initialized IsInitialized = true; - try - { - MemoryPackFormatterProvider.Register(new TrackingDeviceFormatter()); - MemoryPackFormatterProvider.Register(new TrackedJointFormatter()); + MemoryPackFormatterProvider.Register(new TrackingDeviceFormatter()); + MemoryPackFormatterProvider.Register(new TrackedJointFormatter()); - if (RelayService.Instance?.IsBackfeed ?? false) - { - Status = RelayDeviceStatus.BackFeedDetected; - SettingsPage.DeviceStatusAppendix = string.Empty; - InitException = null; - return; // Don't proceed further - } + if (RelayService.Instance?.IsBackfeed ?? false) + { + Status = RelayDeviceStatus.BackFeedDetected; + SettingsPage.DeviceStatusAppendix = string.Empty; + InitException = null; + return; // Don't proceed further + } - var services = new ServiceCollection() - .AddLogging(logging => logging.AddConsole()); + var services = new ServiceCollection() + .AddLogging(); - services.AddRpc() - .AddWebSocketClient($"http://{ServerIp}:{ServerPort}/") - .AddClient() - .AddServer(); + services.AddRpc() + .AddWebSocketClient($"http://{ServerIp}:{ServerPort}/") + .AddClient(); - ServiceChannel = services.BuildServiceProvider(); - Service = ServiceChannel.GetRequiredService(); + ServiceChannel = services.BuildServiceProvider(); + Service = ServiceChannel.GetRequiredService(); - SettingsPage.DeviceStatusAppendix = string.Empty; - SettingsPage.StartConnectionTest(); - } - catch (Exception ex) - { - InitException = ex; - Status = RelayDeviceStatus.ServiceError; - return; - } + SettingsPage.DeviceStatusAppendix = string.Empty; + SettingsPage.StartConnectionTest(); Host.Log($"Tried to initialize with status: {DeviceStatusString}"); InitException = null; diff --git a/plugin_Relay/RelayService.cs b/plugin_Relay/RelayService.cs index 37a8fa1..a2084d3 100644 --- a/plugin_Relay/RelayService.cs +++ b/plugin_Relay/RelayService.cs @@ -15,10 +15,10 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using plugin_Relay.Models; -using Stl.Rpc; +using ActualLab.Rpc; using IServiceEndpoint = Amethyst.Plugins.Contract.IServiceEndpoint; using Microsoft.AspNetCore.Builder; -using Stl.Rpc.Server; +using ActualLab.Rpc.Server; using MemoryPack; using Microsoft.Extensions.Logging; @@ -209,18 +209,6 @@ public int Initialize() rpc.AddServer() .AddClient(); - builder.Services.AddSingleton(c => - { - RpcHub rpcHub = null; // Necessary because of IRelayClient, which requires call routing - return (methodDef, args) => - { - rpcHub ??= c.RpcHub(); // We can't resolve it earlier, coz otherwise it will trigger recursion - if (methodDef.Service.Type != typeof(IRelayClient)) return rpcHub.GetClientPeer(RpcPeerRef.Default); - var peerRef = new RpcPeerRef(args.Get(0), true); - return rpcHub.GetServerPeer(peerRef); - }; - }); - var app = builder.Build(); app.Urls.Add($"http://0.0.0.0:{ServerPort}/"); app.UseWebSockets(); diff --git a/plugin_Relay/plugin_Relay.csproj b/plugin_Relay/plugin_Relay.csproj index f4d6e2b..04b85cf 100644 --- a/plugin_Relay/plugin_Relay.csproj +++ b/plugin_Relay/plugin_Relay.csproj @@ -24,13 +24,17 @@ + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + - - - + From 1abc25431654afc0529d380679e7ea4236e5ceec Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 23:57:15 +0000 Subject: [PATCH 3/3] Clean up plugin_Relay.sln: Remove RelayTestServer and extra platform configurations Co-authored-by: Stiggimy <54530387+Stiggimy@users.noreply.github.com> --- plugin_Relay.sln | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/plugin_Relay.sln b/plugin_Relay.sln index 50befc7..8863d0e 100644 --- a/plugin_Relay.sln +++ b/plugin_Relay.sln @@ -10,42 +10,16 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .editorconfig = .editorconfig EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RelayTestServer", "RelayTestServer\RelayTestServer.csproj", "{91A955FC-0A91-4DD9-80A4-B0E79205B357}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 - Debug|Any CPU = Debug|Any CPU - Debug|x86 = Debug|x86 Release|x64 = Release|x64 - Release|Any CPU = Release|Any CPU - Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Debug|x64.ActiveCfg = Debug|x64 {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Debug|x64.Build.0 = Debug|x64 - {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Debug|x86.ActiveCfg = Debug|Any CPU - {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Debug|x86.Build.0 = Debug|Any CPU {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Release|x64.ActiveCfg = Release|x64 {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Release|x64.Build.0 = Release|x64 - {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Release|Any CPU.Build.0 = Release|Any CPU - {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Release|x86.ActiveCfg = Release|Any CPU - {3C5DB9DE-D479-4160-815D-7B664F6AC8EF}.Release|x86.Build.0 = Release|Any CPU - {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Debug|x64.ActiveCfg = Debug|Any CPU - {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Debug|x64.Build.0 = Debug|Any CPU - {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Debug|x86.ActiveCfg = Debug|Any CPU - {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Debug|x86.Build.0 = Debug|Any CPU - {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Release|x64.ActiveCfg = Release|Any CPU - {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Release|x64.Build.0 = Release|Any CPU - {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Release|Any CPU.Build.0 = Release|Any CPU - {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Release|x86.ActiveCfg = Release|Any CPU - {91A955FC-0A91-4DD9-80A4-B0E79205B357}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE