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