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 + + + + + + + + + +