From 3af2e66c837c3ae263bb4838a4930bf6c62717f5 Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofanov Date: Thu, 13 Mar 2025 21:35:37 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D0=B5?= =?UTF-8?q?=D0=B9=20=D1=81=D0=B5=D1=82=D0=B5=D0=B2=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=88=D0=BB=D1=8E=D0=B7=D0=B0=20=D0=B8=20=D1=85=D0=B0=D0=B1?= =?UTF-8?q?=D0=B0=20=D1=8D=D0=BA=D1=81=D1=82=D1=80=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Backend/HubRequestExtractor.cs | 8 ++- .../Backend/NetworkGatewayModule.cs | 49 ++++++++++--------- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/mROA/Implementation/Backend/HubRequestExtractor.cs b/mROA/Implementation/Backend/HubRequestExtractor.cs index 4754761..6529c6c 100644 --- a/mROA/Implementation/Backend/HubRequestExtractor.cs +++ b/mROA/Implementation/Backend/HubRequestExtractor.cs @@ -47,6 +47,12 @@ namespace mROA.Implementation.Backend } private void HubOnOnConnected(IRepresentationModule interaction) + { + var extractor = CreateExtractor(interaction); + _ = extractor.StartExtraction(); + } + + private IRequestExtractor CreateExtractor(IRepresentationModule interaction) { var extractor = (IRequestExtractor)Activator.CreateInstance(_extractorType)!; extractor.Inject(interaction); @@ -58,7 +64,7 @@ namespace mROA.Implementation.Backend extractor.Inject(_serializationToolkit); extractor.Inject(_executeModule); extractor.Inject(_remoteContextRepository); - _ = extractor.StartExtraction(); + return extractor; } } } \ No newline at end of file diff --git a/mROA/Implementation/Backend/NetworkGatewayModule.cs b/mROA/Implementation/Backend/NetworkGatewayModule.cs index 61e19c7..d7bf45d 100644 --- a/mROA/Implementation/Backend/NetworkGatewayModule.cs +++ b/mROA/Implementation/Backend/NetworkGatewayModule.cs @@ -59,6 +59,33 @@ namespace mROA.Implementation.Backend } private void HandleIncomingConnections() + { + ThrowIfNotInjected(); + + while (true) + { + var client = _tcpListener.AcceptTcpClient(); + Console.WriteLine($"Client connected from {client.Client.RemoteEndPoint}"); + var interaction = Activator.CreateInstance(_interactionModuleType!) as INextGenerationInteractionModule; + + foreach (var injectableModule in _injectableModules!) + interaction!.Inject(injectableModule); + + interaction!.Inject(_serialization); + + interaction.BaseStream = client.GetStream(); + + interaction.PostMessage(new NetworkMessage + { + Id = Guid.NewGuid(), SchemaId = MessageType.IdAssigning, + Data = _serialization!.Serialize(new IdAssignment { Id = -interaction.ConnectionId }) + }); + _hub!.RegisterInteraction(interaction); + Console.WriteLine("Client registered"); + } + } + + private void ThrowIfNotInjected() { if (_hub is null) throw new NullReferenceException("Hub module is null"); @@ -70,28 +97,6 @@ namespace mROA.Implementation.Backend throw new NullReferenceException("InteractionModuleType is null"); if (_serialization is null) throw new NullReferenceException("Serialization is null"); - - while (true) - { - var client = _tcpListener.AcceptTcpClient(); - Console.WriteLine($"Client connected from {client.Client.RemoteEndPoint}"); - var interaction = Activator.CreateInstance(_interactionModuleType) as INextGenerationInteractionModule; - - foreach (var injectableModule in _injectableModules) - interaction!.Inject(injectableModule); - - interaction!.Inject(_serialization); - - interaction.BaseStream = client.GetStream(); - - interaction.PostMessage(new NetworkMessage - { - Id = Guid.NewGuid(), SchemaId = MessageType.IdAssigning, - Data = _serialization.Serialize(new IdAssignment { Id = -interaction.ConnectionId }) - }); - _hub.RegisterInteraction(interaction); - Console.WriteLine("Client registered"); - } } } } \ No newline at end of file