From 997a35159afe88e0c15fd053f38823beb991bc17 Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofanov Date: Thu, 13 Mar 2025 15:10:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B5=D0=BA=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Example.Events.Backend.csproj | 14 ++++ Example.Events.Backend/Program.cs | 54 ++++++++++++++++ .../Example.Events.Client.csproj | 14 ++++ Example.Events.Client/Program.cs | 64 +++++++++++++++++++ .../Example.Events.Shared.csproj | 16 +++++ 5 files changed, 162 insertions(+) create mode 100644 Example.Events.Backend/Example.Events.Backend.csproj create mode 100644 Example.Events.Backend/Program.cs create mode 100644 Example.Events.Client/Example.Events.Client.csproj create mode 100644 Example.Events.Client/Program.cs create mode 100644 Example.Events.Shared/Example.Events.Shared.csproj diff --git a/Example.Events.Backend/Example.Events.Backend.csproj b/Example.Events.Backend/Example.Events.Backend.csproj new file mode 100644 index 0000000..2c675f7 --- /dev/null +++ b/Example.Events.Backend/Example.Events.Backend.csproj @@ -0,0 +1,14 @@ + + + + Exe + net9.0 + enable + enable + + + + + + + diff --git a/Example.Events.Backend/Program.cs b/Example.Events.Backend/Program.cs new file mode 100644 index 0000000..b5c9964 --- /dev/null +++ b/Example.Events.Backend/Program.cs @@ -0,0 +1,54 @@ +using System.Net; +using mROA.Abstract; +using mROA.Cbor; +using mROA.Codegen; +using mROA.Implementation; +using mROA.Implementation.Backend; +using mROA.Implementation.Bootstrap; +using mROA.Implementation.Frontend; + +namespace Example.Events.Backend; + +class Program +{ + static void Main(string[] args) + { + var builder = new FullMixBuilder(); + // builder.UseJsonSerialisation(); + builder.Modules.Add(new CborSerializationToolkit()); + builder.Modules.Add(new BackendIdentityGenerator()); + builder.UseNetworkGateway(new IPEndPoint(IPAddress.Loopback, 4567), typeof(NextGenerationInteractionModule), + builder.GetModule()!); + + builder.Modules.Add(new ConnectionHub()); + builder.Modules.Add(new HubRequestExtractor(typeof(RequestExtractor))); + + builder.UseBasicExecution(); + builder.Modules.Add(new CreativeRepresentationModuleProducer( + new IInjectableModule[] { builder.GetModule()! }, + typeof(RepresentationModule))); + builder.Modules.Add(new RemoteContextRepository()); +// builder.UseCollectableContextRepository(typeof(PrinterFactory).Assembly); + builder.Modules.Add(new MultiClientContextRepository(i => + { + var repo = new ContextRepository(); + repo.FillSingletons(typeof(ChatFactory).Assembly); + repo.Inject(builder.Modules.OfType().First()); + return repo; + })); + builder.SetupMethodsRepository(new CoCodegenMethodRepository()); + + builder.Modules.Add(new CancellationRepository()); + + builder.Build(); + new RemoteTypeBinder(); + + TransmissionConfig.RealContextRepository = builder.GetModule(); + TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule(); + TransmissionConfig.OwnershipRepository = new MultiClientOwnershipRepository(); + + var gateway = builder.GetModule(); + + gateway.Run(); + } +} \ No newline at end of file diff --git a/Example.Events.Client/Example.Events.Client.csproj b/Example.Events.Client/Example.Events.Client.csproj new file mode 100644 index 0000000..2c675f7 --- /dev/null +++ b/Example.Events.Client/Example.Events.Client.csproj @@ -0,0 +1,14 @@ + + + + Exe + net9.0 + enable + enable + + + + + + + diff --git a/Example.Events.Client/Program.cs b/Example.Events.Client/Program.cs new file mode 100644 index 0000000..6d45ec6 --- /dev/null +++ b/Example.Events.Client/Program.cs @@ -0,0 +1,64 @@ +using System.Net; +using Example.Events.Shared; +using mROA.Cbor; +using mROA.Codegen; +using mROA.Implementation; +using mROA.Implementation.Backend; +using mROA.Implementation.Bootstrap; +using mROA.Implementation.Frontend; + +namespace Example.Events.Client; + +class Program +{ + static void Main(string[] args) + { + var builder = new FullMixBuilder(); + new RemoteTypeBinder(); + // builder.Modules.Add(new JsonSerializationToolkit()); + builder.Modules.Add(new CborSerializationToolkit()); + + builder.Modules.Add(new RemoteContextRepository()); + builder.Modules.Add(new NextGenerationInteractionModule()); + builder.Modules.Add(new RepresentationModule()); + builder.Modules.Add(new NetworkFrontendBridge(new IPEndPoint(IPAddress.Loopback, 4567))); + builder.Modules.Add(new StaticRepresentationModuleProducer()); + builder.Modules.Add(new RequestExtractor()); + builder.Modules.Add(new BasicExecutionModule()); + builder.Modules.Add(new CoCodegenMethodRepository()); + builder.UseCollectableContextRepository(); + builder.Modules.Add(new CancellationRepository()); + + builder.Build(); + + + TransmissionConfig.RealContextRepository = builder.GetModule(); + TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule(); + + builder.GetModule()!.Connect(); + _ = builder.GetModule()!.StartExtraction(); + + var chatFactory = + TransmissionConfig.RemoteEndpointContextRepository.GetSingleObject(typeof(IChatFactory), 0) as IChatFactory; + var chat = chatFactory.GetChat(Guid.Empty); + chat.OnCharPosted += (s, context) => { Console.Write(s); }; + while (true) + { + var input = Console.ReadKey(true); + if (input.Key == ConsoleKey.Escape) + return; + + var symb = ""; + + if (input.Key == ConsoleKey.Backspace) + { + symb = "\b \b"; + } + else + symb = input.KeyChar.ToString(); + + Console.Write(symb); + chat.PostSymbol(symb); + } + } +} \ No newline at end of file diff --git a/Example.Events.Shared/Example.Events.Shared.csproj b/Example.Events.Shared/Example.Events.Shared.csproj new file mode 100644 index 0000000..98d21fd --- /dev/null +++ b/Example.Events.Shared/Example.Events.Shared.csproj @@ -0,0 +1,16 @@ + + + + net9.0 + enable + 9 + + + + + + + + + +