From 5e805a28b0513eecaf35aff9e64a3ec55c2850ed Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofanov Date: Wed, 5 Feb 2025 14:50:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B1=D1=8D=D0=BA=D0=B5=D0=BD=D0=B4=20=D1=82=D0=B5?= =?UTF-8?q?=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Example.Shared/IPrinterFactory.cs | 58 +++++++++++++ mROA.Codegen/Properties/launchSettings.json | 2 +- .../SampleIncrementalSourceGenerator.cs | 1 + .../mROA.Codegen.AssemblyInfo.cs | 2 +- mROA.Example/ITestController.cs | 16 ---- mROA.Example/ITestParameter.cs | 9 -- mROA.Example/Main.cs | 25 ------ mROA.Example/TestController.cs | 52 ----------- mROA.Example/TestControllerRemoteEndpoint.cs | 86 ------------------- mROA.Example/TestParameter.cs | 9 -- mROA.Example/TestParameterInstance.cs | 6 -- mROA.Example/TestParameterRemoteEndpoint.cs | 20 ----- mROA.Example/TransmissionTestController.cs | 52 ----------- mROA.Example/mROA.Example.csproj | 16 ---- .../Debug/net9.0/mROA.Example.AssemblyInfo.cs | 22 ----- .../net9.0/mROA.Example.GlobalUsings.g.cs | 8 -- .../obj/mROA.Example.csproj.nuget.g.props | 16 ---- .../obj/mROA.Example.csproj.nuget.g.targets | 2 - mROA.Test/FrontendFinalTest.cs | 4 +- mROA.Test/UnitTest1.cs | 2 +- mROA.Test/mROA.Test.csproj | 1 - .../Debug/net9.0/mROA.Test.AssemblyInfo.cs | 2 +- mROA.sln | 22 +++-- mROA/Abstract/IGatewayModule.cs | 7 +- .../Backend/BasicConfigurationExtensions.cs | 40 +++++++++ .../BasicExecutionModule.cs} | 2 +- .../{ => Backend}/ContextRepository.cs | 4 +- .../Backend/JsonSerialisationModule.cs | 1 + .../Backend/NetworkGatewayModule.cs | 26 ++++-- .../Bootstrap/ServerBootstrap.cs | 24 ++++++ mROA/obj/Debug/net9.0/mROA.AssemblyInfo.cs | 2 +- 31 files changed, 173 insertions(+), 366 deletions(-) create mode 100644 Example.Shared/IPrinterFactory.cs delete mode 100644 mROA.Example/ITestController.cs delete mode 100644 mROA.Example/ITestParameter.cs delete mode 100644 mROA.Example/Main.cs delete mode 100644 mROA.Example/TestController.cs delete mode 100644 mROA.Example/TestControllerRemoteEndpoint.cs delete mode 100644 mROA.Example/TestParameter.cs delete mode 100644 mROA.Example/TestParameterInstance.cs delete mode 100644 mROA.Example/TestParameterRemoteEndpoint.cs delete mode 100644 mROA.Example/TransmissionTestController.cs delete mode 100644 mROA.Example/mROA.Example.csproj delete mode 100644 mROA.Example/obj/Debug/net9.0/mROA.Example.AssemblyInfo.cs delete mode 100644 mROA.Example/obj/Debug/net9.0/mROA.Example.GlobalUsings.g.cs delete mode 100644 mROA.Example/obj/mROA.Example.csproj.nuget.g.props delete mode 100644 mROA.Example/obj/mROA.Example.csproj.nuget.g.targets create mode 100644 mROA/Implementation/Backend/BasicConfigurationExtensions.cs rename mROA/Implementation/{LaunchReadyExecutionModule.cs => Backend/BasicExecutionModule.cs} (98%) rename mROA/Implementation/{ => Backend}/ContextRepository.cs (94%) create mode 100644 mROA/Implementation/Bootstrap/ServerBootstrap.cs diff --git a/Example.Shared/IPrinterFactory.cs b/Example.Shared/IPrinterFactory.cs new file mode 100644 index 0000000..40d75ad --- /dev/null +++ b/Example.Shared/IPrinterFactory.cs @@ -0,0 +1,58 @@ +using System.Text; +using mROA.Implementation; + +namespace Example.Shared; + +[SharedObjectInterface] +public interface IPrinterFactory +{ + TransmittedSharedObject Create(string printerName); +} + + +[SharedObjectSingleton] +public class PrinterFactory : IPrinterFactory +{ + public TransmittedSharedObject Create(string printerName) + { + return new Printer(){Name = printerName}; + } +} + + +[SharedObjectInterface] +public interface IPrinter +{ + string GetName(); + TransmittedSharedObject Print(string text); + +} + +public class Printer : IPrinter +{ + public string Name; + public string GetName() + { + return Name; + } + + public TransmittedSharedObject Print(string text) + { + return new Page {Text = text}; + } +} + +[SharedObjectInterface] +public interface IPage +{ + byte[] GetData(); +} + +public class Page : IPage +{ + public string Text; + public byte[] GetData() + { + return Encoding.UTF8.GetBytes(Text); + } +} \ No newline at end of file diff --git a/mROA.Codegen/Properties/launchSettings.json b/mROA.Codegen/Properties/launchSettings.json index f923004..8403a4d 100644 --- a/mROA.Codegen/Properties/launchSettings.json +++ b/mROA.Codegen/Properties/launchSettings.json @@ -3,7 +3,7 @@ "profiles": { "DebugRoslynSourceGenerator": { "commandName": "DebugRoslynComponent", - "targetProject": "../mROA.Example/mROA.Example.csproj" + "targetProject": "../Example.Shared/Example.Shared.csproj" } } } \ No newline at end of file diff --git a/mROA.Codegen/SampleIncrementalSourceGenerator.cs b/mROA.Codegen/SampleIncrementalSourceGenerator.cs index 5c9e980..13a8462 100644 --- a/mROA.Codegen/SampleIncrementalSourceGenerator.cs +++ b/mROA.Codegen/SampleIncrementalSourceGenerator.cs @@ -175,6 +175,7 @@ namespace {Namespace} var code = $@"// +using mROA; using System; using mROA.Implementation; using System.Collections.Generic; diff --git a/mROA.Codegen/obj/Debug/netstandard2.0/mROA.Codegen.AssemblyInfo.cs b/mROA.Codegen/obj/Debug/netstandard2.0/mROA.Codegen.AssemblyInfo.cs index 2df56f9..cd4dd4d 100644 --- a/mROA.Codegen/obj/Debug/netstandard2.0/mROA.Codegen.AssemblyInfo.cs +++ b/mROA.Codegen/obj/Debug/netstandard2.0/mROA.Codegen.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("mROA.Codegen")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f51dd93c8755e9e879dfa42a02f470d64a7d711a")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+cc5c595948305981ceadef95889ffeab017dd2b7")] [assembly: System.Reflection.AssemblyProductAttribute("mROA.Codegen")] [assembly: System.Reflection.AssemblyTitleAttribute("mROA.Codegen")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/mROA.Example/ITestController.cs b/mROA.Example/ITestController.cs deleted file mode 100644 index b56b427..0000000 --- a/mROA.Example/ITestController.cs +++ /dev/null @@ -1,16 +0,0 @@ -using mROA.Implementation; - -namespace mROA.Example; - -[SharedObjectInterface] -public interface ITestController -{ - void A(); - Task AAsync(CancellationToken cancellationToken); - int B(); - Task BAsync(CancellationToken cancellationToken); - TransmittedSharedObject SharedObjectTransmitionTest(); - int Parametrized(TestParameter parameter); - TransmittedSharedObject GetTestParameter(); - string Alphabet(); -} \ No newline at end of file diff --git a/mROA.Example/ITestParameter.cs b/mROA.Example/ITestParameter.cs deleted file mode 100644 index 415603d..0000000 --- a/mROA.Example/ITestParameter.cs +++ /dev/null @@ -1,9 +0,0 @@ -using mROA.Implementation; - -namespace mROA.Example; - -[SharedObjectInterface] -public interface ITestParameter -{ - public int Test(); -} \ No newline at end of file diff --git a/mROA.Example/Main.cs b/mROA.Example/Main.cs deleted file mode 100644 index f2ab4a4..0000000 --- a/mROA.Example/Main.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Runtime.InteropServices; -using mROA.Implementation; - -namespace mROA.Example; - -public class MainX -{ - public static void Main(string[] args) - { - IRemoteObject x; - // CoCodegenMethodRepository a = new CoCodegenMethodRepository(); - unsafe - { - - } - } - - public unsafe byte[] Convert(T input) - { - var size = Marshal.SizeOf(typeof(T)); - var place = Marshal.AllocHGlobal(size); - var pt = (T*)place; - return []; - } -} \ No newline at end of file diff --git a/mROA.Example/TestController.cs b/mROA.Example/TestController.cs deleted file mode 100644 index 03e7db0..0000000 --- a/mROA.Example/TestController.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Diagnostics.SymbolStore; -using System.Reflection; -using mROA.Implementation; - -namespace mROA.Example; - -[SharedObjectSingleton] -public class TestController : ITestController -{ - public ITestController? ReturnIfNotNull; - private int _bOut = 5; - - public void A() - { - Console.WriteLine("A called"); - } - - public Task AAsync(CancellationToken cancellationToken) - { - return Task.CompletedTask; - } - - public int B() - { - return _bOut++; - } - - public Task BAsync(CancellationToken cancellationToken) - { - return Task.FromResult(5); - } - - public TransmittedSharedObject SharedObjectTransmitionTest() - { - return new TransmissionTestController { ReturnIfNotNull = ReturnIfNotNull ?? new TestController() }; - } - - public int Parametrized(TestParameter parameter) - { - return parameter.A + parameter.LinkedObject.Value.Test(); - } - - public TransmittedSharedObject GetTestParameter() - { - return new TestParameterInstance(); - } - - public string Alphabet() - { - return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - } -} \ No newline at end of file diff --git a/mROA.Example/TestControllerRemoteEndpoint.cs b/mROA.Example/TestControllerRemoteEndpoint.cs deleted file mode 100644 index b4965c2..0000000 --- a/mROA.Example/TestControllerRemoteEndpoint.cs +++ /dev/null @@ -1,86 +0,0 @@ -// using System.Text.Json; -// using mROA.Implementation; -// -// namespace mROA.Example; -// -// public class TestControllerRemoteEndpoint(int id, ISerialisationModule.IFrontendSerialisationModule serialisationModule) -// : ITestController, IRemoteObject -// { -// public void A() -// { -// serialisationModule.PostCallRequest(new JsonCallRequest { CommandId = 0, ObjectId = id }); -// } -// -// public async Task AAsync(CancellationToken cancellationToken) -// { -// var request = new JsonCallRequest { CommandId = 1, ObjectId = id }; -// serialisationModule.PostCallRequest(request); -// await serialisationModule.GetNextCommandExecution(request.CallRequestId); -// } -// -// public int B() -// { -// TransmissionConfig.SetupBackendRepository(); -// var request = new JsonCallRequest { CommandId = 2, ObjectId = id }; -// serialisationModule.PostCallRequest(request); -// var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) -// .GetAwaiter().GetResult(); -// TransmissionConfig.SetupFrontendRepository(); -// var convertation = response.Result! is JsonElement e ? e.Deserialize() : (int)response.Result!; -// return convertation; -// } -// -// public async Task BAsync(CancellationToken cancellationToken) -// { -// var request = new JsonCallRequest { CommandId = 3, ObjectId = id }; -// serialisationModule.PostCallRequest(request); -// var response = await serialisationModule.GetFinalCommandExecution(request.CallRequestId); -// var convertation = response.Result! is JsonElement e ? e.Deserialize() : (int)response.Result!; -// return convertation; -// } -// -// public TransmittedSharedObject SharedObjectTransmitionTest() -// { -// TransmissionConfig.SetupBackendRepository(); -// -// var request = new JsonCallRequest { CommandId = 4, ObjectId = id }; -// serialisationModule.PostCallRequest(request); -// var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) -// .GetAwaiter().GetResult(); -// TransmissionConfig.SetupFrontendRepository(); -// var convertation = response.Result! is JsonElement e -// ? e.Deserialize>()! -// : (TransmittedSharedObject)response.Result!; -// return convertation; -// } -// -// public int Parametrized(TestParameter parameter) -// { -// var request = new JsonCallRequest { CommandId = 5, ObjectId = id, Parameter = parameter }; -// TransmissionConfig.SetupBackendRepository(); -// -// serialisationModule.PostCallRequest(request); -// var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) -// .GetAwaiter().GetResult(); -// -// TransmissionConfig.SetupFrontendRepository(); -// var convertation = response.Result! is JsonElement e ? e.Deserialize() : (int)response.Result!; -// return convertation; -// } -// -// public TransmittedSharedObject GetTestParameter() -// { -// TransmissionConfig.SetupBackendRepository(); -// var request = new JsonCallRequest { CommandId = 6, ObjectId = id }; -// serialisationModule.PostCallRequest(request); -// var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) -// .GetAwaiter().GetResult(); -// TransmissionConfig.SetupFrontendRepository(); -// var convertation = response.Result! is JsonElement e -// ? e.Deserialize>() -// : (TransmittedSharedObject)response.Result!; -// return convertation; -// } -// -// public int Id => id; -// } \ No newline at end of file diff --git a/mROA.Example/TestParameter.cs b/mROA.Example/TestParameter.cs deleted file mode 100644 index abb742f..0000000 --- a/mROA.Example/TestParameter.cs +++ /dev/null @@ -1,9 +0,0 @@ -using mROA.Implementation; - -namespace mROA.Example; - -public class TestParameter -{ - public int A { get; set; } - public TransmittedSharedObject LinkedObject { get; set; } -} \ No newline at end of file diff --git a/mROA.Example/TestParameterInstance.cs b/mROA.Example/TestParameterInstance.cs deleted file mode 100644 index 463239f..0000000 --- a/mROA.Example/TestParameterInstance.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace mROA.Example; - -public class TestParameterInstance : ITestParameter -{ - public int Test() => 10; -} \ No newline at end of file diff --git a/mROA.Example/TestParameterRemoteEndpoint.cs b/mROA.Example/TestParameterRemoteEndpoint.cs deleted file mode 100644 index 2328739..0000000 --- a/mROA.Example/TestParameterRemoteEndpoint.cs +++ /dev/null @@ -1,20 +0,0 @@ -// using System.Text.Json; -// using mROA.Implementation; -// -// namespace mROA.Example; -// -// public class TestParameterRemoteEndpoint(int id, ISerialisationModule.IFrontendSerialisationModule serialisationModule) : ITestParameter, IRemoteObject{ -// public int Test() -// { -// var request = new JsonCallRequest { CommandId = 7, ObjectId = id }; -// serialisationModule.PostCallRequest(request); -// var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) -// .GetAwaiter().GetResult(); -// TransmissionConfig.SetupFrontendRepository(); -// var convertation = response.Result! is JsonElement e ? e.Deserialize() : (int)response.Result!; -// TransmissionConfig.SetupBackendRepository(); -// return convertation; -// } -// -// public int Id => id; -// } \ No newline at end of file diff --git a/mROA.Example/TransmissionTestController.cs b/mROA.Example/TransmissionTestController.cs deleted file mode 100644 index cebd1c1..0000000 --- a/mROA.Example/TransmissionTestController.cs +++ /dev/null @@ -1,52 +0,0 @@ -using mROA.Implementation; - -namespace mROA.Example; - -public class TransmissionTestController : ITestController -{ - public ITestController ReturnIfNotNull; - - public void A() - { - Console.WriteLine("A called alternative"); - } - - public Task AAsync(CancellationToken cancellationToken) - { - Thread.Sleep(500); - return Task.CompletedTask; - } - - public int B() - { - return 456789; - } - - public Task BAsync(CancellationToken cancellationToken) - { - return Task.FromResult(465789); - } - - public TransmittedSharedObject SharedObjectTransmitionTest() - { - TransmittedSharedObject x = new TestController(); - - - return new TestController { ReturnIfNotNull = this }; - } - - public int Parametrized(TestParameter parameter) - { - return parameter.A * parameter.LinkedObject.Value.Test(); - } - - public TransmittedSharedObject GetTestParameter() - { - return new TestParameterInstance(); - } - - public string Alphabet() - { - return "ABCDEFGHIJKLMNOPQRSTUVWXYZ".Reverse().ToString(); - } -} \ No newline at end of file diff --git a/mROA.Example/mROA.Example.csproj b/mROA.Example/mROA.Example.csproj deleted file mode 100644 index e8a41d0..0000000 --- a/mROA.Example/mROA.Example.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - net9.0 - enable - enable - Exe - true - - - - - - - - diff --git a/mROA.Example/obj/Debug/net9.0/mROA.Example.AssemblyInfo.cs b/mROA.Example/obj/Debug/net9.0/mROA.Example.AssemblyInfo.cs deleted file mode 100644 index 99f27b3..0000000 --- a/mROA.Example/obj/Debug/net9.0/mROA.Example.AssemblyInfo.cs +++ /dev/null @@ -1,22 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -using System; -using System.Reflection; - -[assembly: System.Reflection.AssemblyCompanyAttribute("mROA.Example")] -[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] -[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f51dd93c8755e9e879dfa42a02f470d64a7d711a")] -[assembly: System.Reflection.AssemblyProductAttribute("mROA.Example")] -[assembly: System.Reflection.AssemblyTitleAttribute("mROA.Example")] -[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] - -// Создано классом WriteCodeFragment MSBuild. - diff --git a/mROA.Example/obj/Debug/net9.0/mROA.Example.GlobalUsings.g.cs b/mROA.Example/obj/Debug/net9.0/mROA.Example.GlobalUsings.g.cs deleted file mode 100644 index 8578f3d..0000000 --- a/mROA.Example/obj/Debug/net9.0/mROA.Example.GlobalUsings.g.cs +++ /dev/null @@ -1,8 +0,0 @@ -// -global using global::System; -global using global::System.Collections.Generic; -global using global::System.IO; -global using global::System.Linq; -global using global::System.Net.Http; -global using global::System.Threading; -global using global::System.Threading.Tasks; diff --git a/mROA.Example/obj/mROA.Example.csproj.nuget.g.props b/mROA.Example/obj/mROA.Example.csproj.nuget.g.props deleted file mode 100644 index 721d876..0000000 --- a/mROA.Example/obj/mROA.Example.csproj.nuget.g.props +++ /dev/null @@ -1,16 +0,0 @@ - - - - True - NuGet - $(MSBuildThisFileDirectory)project.assets.json - $(UserProfile)\.nuget\packages\ - C:\Users\Mikhail\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages - PackageReference - 6.12.0 - - - - - - \ No newline at end of file diff --git a/mROA.Example/obj/mROA.Example.csproj.nuget.g.targets b/mROA.Example/obj/mROA.Example.csproj.nuget.g.targets deleted file mode 100644 index 3dc06ef..0000000 --- a/mROA.Example/obj/mROA.Example.csproj.nuget.g.targets +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/mROA.Test/FrontendFinalTest.cs b/mROA.Test/FrontendFinalTest.cs index eeddb78..c88349c 100644 --- a/mROA.Test/FrontendFinalTest.cs +++ b/mROA.Test/FrontendFinalTest.cs @@ -3,7 +3,7 @@ using System.Net.Sockets; using System.Reflection; using mROA.Abstract; using mROA.Codegen; -using mROA.Example; +using Example.Shared; using mROA.Implementation; namespace mROA.Test; @@ -32,7 +32,7 @@ public class FrontendFinalTest _serialisationModule = new JsonSerialisationModule(); - _executeModule = new LaunchReadyExecutionModule(); + _executeModule = new BasicExecutionModule(); IInjectableModule[] backendModules = [_methodRepository, _contextRepository, _interactionModule, _serialisationModule, _executeModule]; diff --git a/mROA.Test/UnitTest1.cs b/mROA.Test/UnitTest1.cs index 1c41855..78a3e38 100644 --- a/mROA.Test/UnitTest1.cs +++ b/mROA.Test/UnitTest1.cs @@ -2,7 +2,7 @@ // using System.Reflection; // using System.Text; // using System.Text.Json; -// using mROA.Example; +// using Example.Shared; // using mROA.Implementation; // using Newtonsoft.Json; // using JsonSerializer = System.Text.Json.JsonSerializer; diff --git a/mROA.Test/mROA.Test.csproj b/mROA.Test/mROA.Test.csproj index 8a3797b..4262b31 100644 --- a/mROA.Test/mROA.Test.csproj +++ b/mROA.Test/mROA.Test.csproj @@ -27,7 +27,6 @@ - diff --git a/mROA.Test/obj/Debug/net9.0/mROA.Test.AssemblyInfo.cs b/mROA.Test/obj/Debug/net9.0/mROA.Test.AssemblyInfo.cs index 81423e9..729ac3b 100644 --- a/mROA.Test/obj/Debug/net9.0/mROA.Test.AssemblyInfo.cs +++ b/mROA.Test/obj/Debug/net9.0/mROA.Test.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("mROA.Test")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f51dd93c8755e9e879dfa42a02f470d64a7d711a")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+cc5c595948305981ceadef95889ffeab017dd2b7")] [assembly: System.Reflection.AssemblyProductAttribute("mROA.Test")] [assembly: System.Reflection.AssemblyTitleAttribute("mROA.Test")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/mROA.sln b/mROA.sln index b268ff7..f4b0faf 100644 --- a/mROA.sln +++ b/mROA.sln @@ -6,7 +6,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mROA.Test", "mROA.Test\mROA EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mROA.Codegen", "mROA.Codegen\mROA.Codegen.csproj", "{6CE0ED21-88FD-44B3-B9C6-9B8FA4E07E89}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mROA.Example", "mROA.Example\mROA.Example.csproj", "{5F4EEF2B-A82C-44DA-8995-AF1668A238EC}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Example", "Example", "{EAE92F5A-664C-41AB-8811-5885524B5347}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Example.Backend", "Example.Backend\Example.Backend.csproj", "{A9BB364E-0BA6-40B9-A293-757BC48EFC06}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Example.Shared", "Example.Shared\Example.Shared.csproj", "{E7703F5B-F2A6-4A88-AA57-EBB1E38D533E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -26,9 +30,17 @@ Global {6CE0ED21-88FD-44B3-B9C6-9B8FA4E07E89}.Debug|Any CPU.Build.0 = Debug|Any CPU {6CE0ED21-88FD-44B3-B9C6-9B8FA4E07E89}.Release|Any CPU.ActiveCfg = Release|Any CPU {6CE0ED21-88FD-44B3-B9C6-9B8FA4E07E89}.Release|Any CPU.Build.0 = Release|Any CPU - {5F4EEF2B-A82C-44DA-8995-AF1668A238EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5F4EEF2B-A82C-44DA-8995-AF1668A238EC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5F4EEF2B-A82C-44DA-8995-AF1668A238EC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5F4EEF2B-A82C-44DA-8995-AF1668A238EC}.Release|Any CPU.Build.0 = Release|Any CPU + {A9BB364E-0BA6-40B9-A293-757BC48EFC06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A9BB364E-0BA6-40B9-A293-757BC48EFC06}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A9BB364E-0BA6-40B9-A293-757BC48EFC06}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A9BB364E-0BA6-40B9-A293-757BC48EFC06}.Release|Any CPU.Build.0 = Release|Any CPU + {E7703F5B-F2A6-4A88-AA57-EBB1E38D533E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E7703F5B-F2A6-4A88-AA57-EBB1E38D533E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E7703F5B-F2A6-4A88-AA57-EBB1E38D533E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E7703F5B-F2A6-4A88-AA57-EBB1E38D533E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {A9BB364E-0BA6-40B9-A293-757BC48EFC06} = {EAE92F5A-664C-41AB-8811-5885524B5347} + {E7703F5B-F2A6-4A88-AA57-EBB1E38D533E} = {EAE92F5A-664C-41AB-8811-5885524B5347} EndGlobalSection EndGlobal diff --git a/mROA/Abstract/IGatewayModule.cs b/mROA/Abstract/IGatewayModule.cs index fc29857..2403690 100644 --- a/mROA/Abstract/IGatewayModule.cs +++ b/mROA/Abstract/IGatewayModule.cs @@ -1,7 +1,8 @@ +using mROA.Abstract; + namespace mROA.Implementation; -public interface IGatewayModule : IDisposable -{ - void Configure(IInteractionModule interactionModule); +public interface IGatewayModule : IDisposable, IInjectableModule +{ void Run(); } \ No newline at end of file diff --git a/mROA/Implementation/Backend/BasicConfigurationExtensions.cs b/mROA/Implementation/Backend/BasicConfigurationExtensions.cs new file mode 100644 index 0000000..53709cd --- /dev/null +++ b/mROA/Implementation/Backend/BasicConfigurationExtensions.cs @@ -0,0 +1,40 @@ +using System.Net; +using System.Reflection; +using mROA.Implementation.Bootstrap; + +namespace mROA.Implementation; + +public static class BasicConfigurationExtensions +{ + public static void UseJsonSerialisation(this ServerBootstrap bootstrap) + { + bootstrap.Modules.Add(new JsonSerialisationModule()); + } + + public static void UseNetworkGateway(this ServerBootstrap bootstrap, IPEndPoint endPoint) + { + bootstrap.Modules.Add(new NetworkGatewayModule(endPoint)); + } + + public static void UseStreamInteraction(this ServerBootstrap bootstrap) + { + bootstrap.Modules.Add(new StreamBasedInteractionModule()); + } + + public static void UseBasicExecution(this ServerBootstrap bootstrap) + { + bootstrap.Modules.Add(new BasicExecutionModule()); + } + + public static void UseCollectableContextRepository(this ServerBootstrap bootstrap, params Assembly[] assemblies) + { + var repo = new ContextRepository(); + repo.FillSingletons(assemblies); + bootstrap.Modules.Add(repo); + } + + public static void SetupMethodsRepository(this ServerBootstrap bootstrap, IMethodRepository methodRepository) + { + bootstrap.Modules.Add(methodRepository); + } +} \ No newline at end of file diff --git a/mROA/Implementation/LaunchReadyExecutionModule.cs b/mROA/Implementation/Backend/BasicExecutionModule.cs similarity index 98% rename from mROA/Implementation/LaunchReadyExecutionModule.cs rename to mROA/Implementation/Backend/BasicExecutionModule.cs index f2373be..f88ec19 100644 --- a/mROA/Implementation/LaunchReadyExecutionModule.cs +++ b/mROA/Implementation/Backend/BasicExecutionModule.cs @@ -2,7 +2,7 @@ namespace mROA.Implementation; -public class LaunchReadyExecutionModule : IExecuteModule +public class BasicExecutionModule : IExecuteModule { private IMethodRepository _methodRepo; private ISerialisationModule _serialisationModule; diff --git a/mROA/Implementation/ContextRepository.cs b/mROA/Implementation/Backend/ContextRepository.cs similarity index 94% rename from mROA/Implementation/ContextRepository.cs rename to mROA/Implementation/Backend/ContextRepository.cs index 065f002..4fbe740 100644 --- a/mROA/Implementation/ContextRepository.cs +++ b/mROA/Implementation/Backend/ContextRepository.cs @@ -19,9 +19,9 @@ public class ContextRepository : IContextRepository _storage = new object[StartupSize]; } - public void FillSingletons(Assembly assembly) + public void FillSingletons(params Assembly[] assembly) { - var types = assembly.GetTypes().Where(type => + var types = assembly.SelectMany(x => x.GetTypes()).Where(type => type is { IsClass: true, IsAbstract: false, IsGenericType: false } && type.GetCustomAttributes(typeof(SharedObjectSingletonAttribute), true).Length > 0); _singletons = diff --git a/mROA/Implementation/Backend/JsonSerialisationModule.cs b/mROA/Implementation/Backend/JsonSerialisationModule.cs index e9b589a..1190690 100644 --- a/mROA/Implementation/Backend/JsonSerialisationModule.cs +++ b/mROA/Implementation/Backend/JsonSerialisationModule.cs @@ -1,6 +1,7 @@ using System.Text; using System.Text.Json; using System.Text.Json.Serialization; +using mROA.Implementation.Bootstrap; namespace mROA.Implementation; diff --git a/mROA/Implementation/Backend/NetworkGatewayModule.cs b/mROA/Implementation/Backend/NetworkGatewayModule.cs index 3f83e5c..9412044 100644 --- a/mROA/Implementation/Backend/NetworkGatewayModule.cs +++ b/mROA/Implementation/Backend/NetworkGatewayModule.cs @@ -13,24 +13,24 @@ public class NetworkGatewayModule : IGatewayModule _tcpListener = new TcpListener(endpoint); } - public void Configure(IInteractionModule interactionModule) - { - _interactionModule = interactionModule; - } - public void Run() { _tcpListener.Start(); Console.WriteLine($"Listening on {_tcpListener.LocalEndpoint}"); - Console.WriteLine("Enter Ctrl-C to stop"); + Console.WriteLine("Enter Backspace to stop"); + + Task.Run(HandleIncomingConnections); + while (true) { var key = Console.ReadKey(); - if (key.Key == ConsoleKey.C && key.Modifiers == ConsoleModifiers.Control) + if (key.Key == ConsoleKey.Backspace) break; } - Task.Run(HandleIncomingConnections); + Console.WriteLine("Stopping"); + + } public void Dispose() @@ -49,4 +49,14 @@ public class NetworkGatewayModule : IGatewayModule Console.WriteLine("Client registered"); } } + + public void Inject(T dependency) + { + if (dependency is IInteractionModule interactionModule) + _interactionModule = interactionModule; + } + + public void Bake() + { + } } \ No newline at end of file diff --git a/mROA/Implementation/Bootstrap/ServerBootstrap.cs b/mROA/Implementation/Bootstrap/ServerBootstrap.cs new file mode 100644 index 0000000..4181426 --- /dev/null +++ b/mROA/Implementation/Bootstrap/ServerBootstrap.cs @@ -0,0 +1,24 @@ +using mROA.Abstract; + +namespace mROA.Implementation.Bootstrap; + +public interface IBootstrap +{ + void Build(); +} + +public class ServerBootstrap : IBootstrap +{ + public List Modules { get; private set; } = new(); + public void Build() + { + foreach (var module in Modules) + foreach (var injection in Modules) + module.Inject(injection); + } + + public T GetModule() + { + return Modules.OfType().FirstOrDefault(); + } +} \ No newline at end of file diff --git a/mROA/obj/Debug/net9.0/mROA.AssemblyInfo.cs b/mROA/obj/Debug/net9.0/mROA.AssemblyInfo.cs index c692900..10b7c2f 100644 --- a/mROA/obj/Debug/net9.0/mROA.AssemblyInfo.cs +++ b/mROA/obj/Debug/net9.0/mROA.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("mROA")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f51dd93c8755e9e879dfa42a02f470d64a7d711a")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+cc5c595948305981ceadef95889ffeab017dd2b7")] [assembly: System.Reflection.AssemblyProductAttribute("mROA")] [assembly: System.Reflection.AssemblyTitleAttribute("mROA")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]