на пол пути к переделанному прямому вызову

This commit is contained in:
2025-02-18 11:35:20 +03:00
parent e492cf2541
commit 633e179131
11 changed files with 63 additions and 24 deletions
+1 -1
View File
@@ -3,7 +3,7 @@
public delegate void ConnectionHandler(IRepresentationModule representationModule);
public delegate void DisconnectionHandler(IRepresentationModule representationModule);
public interface IConnectionHub
public interface IConnectionHub : IInjectableModule
{
void RegisterInteraction(INextGenerationInteractionModule interaction);
INextGenerationInteractionModule GetInteracion(int id);
+1 -1
View File
@@ -1,6 +1,6 @@
namespace mROA.Abstract;
public interface IIdentityGenerator
public interface IIdentityGenerator : IInjectableModule
{
int GetNextIdentity();
}
+1 -1
View File
@@ -4,7 +4,7 @@ namespace mROA.Abstract;
public interface INextGenerationInteractionModule : IInjectableModule
{
int ConntectionId { get; }
int ConnectionId { get; }
public Stream? BaseStream { get; set; }
Task<NetworkMessage> GetNextMessageReceiving();
Task PostMessage(NetworkMessage message);
@@ -10,4 +10,8 @@ public class BackendIdentityGenerator : IIdentityGenerator
{
return ++_currentId;
}
public void Inject<T>(T dependency)
{
}
}
@@ -2,14 +2,16 @@
namespace mROA.Implementation.Backend;
public class ConntectionHub : IConnectionHub
public class ConnectionHub : IConnectionHub
{
private readonly Dictionary<int, INextGenerationInteractionModule> _connections = new();
private ISerializationToolkit _serializationToolkit;
private ISerializationToolkit? _serializationToolkit;
public void RegisterInteraction(INextGenerationInteractionModule interaction)
{
if (_serializationToolkit is null)
throw new NullReferenceException("Serialization toolkit is null");
var module = new RepresentationModule();
module.Inject(_serializationToolkit);
module.Inject(interaction);
@@ -23,4 +25,10 @@ public class ConntectionHub : IConnectionHub
public event ConnectionHandler? OnConnected;
public event DisconnectionHandler? OnDisconnected;
public void Inject<T>(T dependency)
{
if (dependency is ISerializationToolkit serializationToolkit)
_serializationToolkit = serializationToolkit;
}
}
@@ -10,6 +10,7 @@ public class HubRequestExtractor : IInjectableModule
private IContextRepository? _contextRepository;
private IMethodRepository? _methodRepository;
private ISerializationToolkit? _serializationToolkit;
private IExecuteModule? _executeModule;
public void Inject<T>(T dependency)
{
switch (dependency)
@@ -27,6 +28,9 @@ public class HubRequestExtractor : IInjectableModule
case ISerializationToolkit serializationToolkit:
_serializationToolkit = serializationToolkit;
break;
case IExecuteModule executeModule:
_executeModule = executeModule;
break;
}
}
@@ -37,6 +41,7 @@ public class HubRequestExtractor : IInjectableModule
extractor.Inject(_contextRepository);
extractor.Inject(_methodRepository);
extractor.Inject(_serializationToolkit);
extractor.Inject(_executeModule);
_ = extractor.StartExtraction();
}
}
@@ -10,6 +10,7 @@ public class NetworkGatewayModule : IGatewayModule
private readonly IInjectableModule[]? _injectableModules;
private readonly TcpListener? _tcpListener;
private IConnectionHub? _hub;
private ISerializationToolkit _serializationToolkit;
public NetworkGatewayModule(IPEndPoint endpoint, Type interactionModuleType, IInjectableModule[] injectableModules)
{
@@ -46,25 +47,35 @@ public class NetworkGatewayModule : IGatewayModule
{
if (_hub is null)
throw new NullReferenceException("Hub module is null");
if (_tcpListener == null)
throw new NullReferenceException("TcpListener is null");
if (_injectableModules is null)
throw new NullReferenceException("InjectableModules is null");
if (_interactionModuleType is null)
throw new NullReferenceException("InteractionModuleType is null");
while (true)
{
var client = _tcpListener.AcceptTcpClient();
Console.WriteLine($"Client connected from {client.Client.RemoteEndPoint}");
var interacton = Activator.CreateInstance(_interactionModuleType) as INextGenerationInteractionModule;
var interaction = Activator.CreateInstance(_interactionModuleType) as INextGenerationInteractionModule;
foreach (var injectableModule in _injectableModules)
interacton.Inject(injectableModule);
_hub.RegisterInteraction(interacton);
interaction!.Inject(injectableModule);
interaction!.Inject(_serializationToolkit);
interaction.BaseStream = client.GetStream();
interaction.PostMessage(new NetworkMessage
{
Id = Guid.NewGuid(), SchemaId = MessageType.IdAssigning,
Data = _serializationToolkit.Serialize(new IdAssingnment { Id = interaction.ConnectionId })
});
_hub.RegisterInteraction(interaction);
Console.WriteLine("Client registered");
}
}
@@ -73,5 +84,7 @@ public class NetworkGatewayModule : IGatewayModule
{
if (dependency is IConnectionHub interactionModule)
_hub = interactionModule;
if (dependency is ISerializationToolkit serializationToolkit)
_serializationToolkit = serializationToolkit;
}
}
@@ -6,7 +6,7 @@ namespace mROA.Implementation;
public class NextGenerationInteractionModule : INextGenerationInteractionModule
{
private ISerializationToolkit? _serialization;
public int ConntectionId { get; private set; }
public int ConnectionId { get; private set; }
public Stream? BaseStream { get; set; }
private Task<NetworkMessage>? _currentReceiving;
private const int BufferSize = ushort.MaxValue;
@@ -20,7 +20,7 @@ public class NextGenerationInteractionModule : INextGenerationInteractionModule
_serialization = toolkit;
break;
case IIdentityGenerator identityGenerator:
ConntectionId = identityGenerator.GetNextIdentity();
ConnectionId = identityGenerator.GetNextIdentity();
break;
}
}
+1 -1
View File
@@ -20,7 +20,7 @@ public class RepresentationModule : IRepresentationModule
}
}
public int Id => _interaction.ConntectionId;
public int Id => _interaction.ConnectionId;
public async Task<T> GetMessage<T>(Guid? requestId, MessageType? messageType)
{