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