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

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
+14 -6
View File
@@ -5,23 +5,31 @@ using mROA.Codegen;
using mROA.Implementation; using mROA.Implementation;
using mROA.Implementation.Backend; using mROA.Implementation.Backend;
using mROA.Implementation.Bootstrap; using mROA.Implementation.Bootstrap;
using mROA.Implementation.Frontend;
var builder = new FullMixBuilder(); var builder = new FullMixBuilder();
builder.UseJsonSerialisation(); builder.UseJsonSerialisation();
builder.UseNetworkGateway(new IPEndPoint(IPAddress.Loopback, 4567)); builder.Modules.Add(new BackendIdentityGenerator());
builder.UseStreamInteraction(); builder.UseNetworkGateway(new IPEndPoint(IPAddress.Loopback, 4567), typeof(NextGenerationInteractionModule),
builder.GetModule<IIdentityGenerator>()!);
builder.Modules.Add(new ConnectionHub());
builder.Modules.Add(new HubRequestExtractor());
builder.UseBasicExecution(); builder.UseBasicExecution();
builder.Modules.Add(new RemoteContextRepository()); builder.Modules.Add(new RemoteContextRepository());
builder.UseCollectableContextRepository(typeof(PrinterFactory).Assembly); builder.UseCollectableContextRepository(typeof(PrinterFactory).Assembly);
builder.SetupMethodsRepository(new CoCodegenMethodRepository()); builder.SetupMethodsRepository(new CoCodegenMethodRepository());
builder.Modules.Add(new CreativeSerializationModuleProducer([], typeof(JsonFrontendSerialisationModule))); builder.Modules.Add(new CreativeSerializationModuleProducer([builder.GetModule<JsonSerializationToolkit>()!], typeof(RepresentationModule)));
builder.Build(); builder.Build();
new RemoteTypeBinder(); new RemoteTypeBinder();
TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule<RemoteContextRepository>();
var gateway = builder.GetModule<IGatewayModule>() ; TransmissionConfig.RealContextRepository = builder.GetModule<ContextRepository>();
TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule<RemoteContextRepository>();
TransmissionConfig.OwnershipRepository = new MultiClientOwnershipRepository();
var gateway = builder.GetModule<IGatewayModule>();
gateway.Run(); gateway.Run();
+3 -2
View File
@@ -9,9 +9,10 @@ using mROA.Implementation.Frontend;
var builder = new FullMixBuilder(); var builder = new FullMixBuilder();
new RemoteTypeBinder(); new RemoteTypeBinder();
builder.Modules.Add(new JsonSerializationToolkit());
builder.Modules.Add(new RemoteContextRepository()); builder.Modules.Add(new RemoteContextRepository());
builder.Modules.Add(new JsonFrontendSerialisationModule()); builder.Modules.Add(new NextGenerationInteractionModule());
builder.Modules.Add(new StreamBasedFrontendInteractionModule()); builder.Modules.Add(new RepresentationModule());
builder.Modules.Add(new NetworkFrontendBridge(new IPEndPoint(IPAddress.Loopback, 4567))); builder.Modules.Add(new NetworkFrontendBridge(new IPEndPoint(IPAddress.Loopback, 4567)));
builder.Modules.Add(new StaticRepresentationModuleProducer()); builder.Modules.Add(new StaticRepresentationModuleProducer());
// builder.Modules.Add(new BasicExecutionModule()); // builder.Modules.Add(new BasicExecutionModule());
+1 -1
View File
@@ -3,7 +3,7 @@
public delegate void ConnectionHandler(IRepresentationModule representationModule); public delegate void ConnectionHandler(IRepresentationModule representationModule);
public delegate void DisconnectionHandler(IRepresentationModule representationModule); public delegate void DisconnectionHandler(IRepresentationModule representationModule);
public interface IConnectionHub public interface IConnectionHub : IInjectableModule
{ {
void RegisterInteraction(INextGenerationInteractionModule interaction); void RegisterInteraction(INextGenerationInteractionModule interaction);
INextGenerationInteractionModule GetInteracion(int id); INextGenerationInteractionModule GetInteracion(int id);
+1 -1
View File
@@ -1,6 +1,6 @@
namespace mROA.Abstract; namespace mROA.Abstract;
public interface IIdentityGenerator public interface IIdentityGenerator : IInjectableModule
{ {
int GetNextIdentity(); int GetNextIdentity();
} }
+1 -1
View File
@@ -4,7 +4,7 @@ namespace mROA.Abstract;
public interface INextGenerationInteractionModule : IInjectableModule public interface INextGenerationInteractionModule : IInjectableModule
{ {
int ConntectionId { get; } int ConnectionId { get; }
public Stream? BaseStream { get; set; } public Stream? BaseStream { get; set; }
Task<NetworkMessage> GetNextMessageReceiving(); Task<NetworkMessage> GetNextMessageReceiving();
Task PostMessage(NetworkMessage message); Task PostMessage(NetworkMessage message);
@@ -10,4 +10,8 @@ public class BackendIdentityGenerator : IIdentityGenerator
{ {
return ++_currentId; return ++_currentId;
} }
public void Inject<T>(T dependency)
{
}
} }
@@ -2,14 +2,16 @@
namespace mROA.Implementation.Backend; namespace mROA.Implementation.Backend;
public class ConntectionHub : IConnectionHub public class ConnectionHub : IConnectionHub
{ {
private readonly Dictionary<int, INextGenerationInteractionModule> _connections = new(); private readonly Dictionary<int, INextGenerationInteractionModule> _connections = new();
private ISerializationToolkit _serializationToolkit; private ISerializationToolkit? _serializationToolkit;
public void RegisterInteraction(INextGenerationInteractionModule interaction) public void RegisterInteraction(INextGenerationInteractionModule interaction)
{ {
if (_serializationToolkit is null)
throw new NullReferenceException("Serialization toolkit is null");
var module = new RepresentationModule(); var module = new RepresentationModule();
module.Inject(_serializationToolkit); module.Inject(_serializationToolkit);
module.Inject(interaction); module.Inject(interaction);
@@ -23,4 +25,10 @@ public class ConntectionHub : IConnectionHub
public event ConnectionHandler? OnConnected; public event ConnectionHandler? OnConnected;
public event DisconnectionHandler? OnDisconnected; 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 IContextRepository? _contextRepository;
private IMethodRepository? _methodRepository; private IMethodRepository? _methodRepository;
private ISerializationToolkit? _serializationToolkit; private ISerializationToolkit? _serializationToolkit;
private IExecuteModule? _executeModule;
public void Inject<T>(T dependency) public void Inject<T>(T dependency)
{ {
switch (dependency) switch (dependency)
@@ -27,6 +28,9 @@ public class HubRequestExtractor : IInjectableModule
case ISerializationToolkit serializationToolkit: case ISerializationToolkit serializationToolkit:
_serializationToolkit = serializationToolkit; _serializationToolkit = serializationToolkit;
break; break;
case IExecuteModule executeModule:
_executeModule = executeModule;
break;
} }
} }
@@ -37,6 +41,7 @@ public class HubRequestExtractor : IInjectableModule
extractor.Inject(_contextRepository); extractor.Inject(_contextRepository);
extractor.Inject(_methodRepository); extractor.Inject(_methodRepository);
extractor.Inject(_serializationToolkit); extractor.Inject(_serializationToolkit);
extractor.Inject(_executeModule);
_ = extractor.StartExtraction(); _ = extractor.StartExtraction();
} }
} }
@@ -10,6 +10,7 @@ public class NetworkGatewayModule : IGatewayModule
private readonly IInjectableModule[]? _injectableModules; private readonly IInjectableModule[]? _injectableModules;
private readonly TcpListener? _tcpListener; private readonly TcpListener? _tcpListener;
private IConnectionHub? _hub; private IConnectionHub? _hub;
private ISerializationToolkit _serializationToolkit;
public NetworkGatewayModule(IPEndPoint endpoint, Type interactionModuleType, IInjectableModule[] injectableModules) public NetworkGatewayModule(IPEndPoint endpoint, Type interactionModuleType, IInjectableModule[] injectableModules)
{ {
@@ -46,25 +47,35 @@ public class NetworkGatewayModule : IGatewayModule
{ {
if (_hub is null) if (_hub is null)
throw new NullReferenceException("Hub module is null"); throw new NullReferenceException("Hub module is null");
if (_tcpListener == null) if (_tcpListener == null)
throw new NullReferenceException("TcpListener is null"); throw new NullReferenceException("TcpListener is null");
if (_injectableModules is null) if (_injectableModules is null)
throw new NullReferenceException("InjectableModules is null"); throw new NullReferenceException("InjectableModules is null");
if (_interactionModuleType is null) if (_interactionModuleType is null)
throw new NullReferenceException("InteractionModuleType is null"); throw new NullReferenceException("InteractionModuleType is null");
while (true) while (true)
{ {
var client = _tcpListener.AcceptTcpClient(); var client = _tcpListener.AcceptTcpClient();
Console.WriteLine($"Client connected from {client.Client.RemoteEndPoint}"); 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) foreach (var injectableModule in _injectableModules)
interacton.Inject(injectableModule); interaction!.Inject(injectableModule);
_hub.RegisterInteraction(interacton);
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"); Console.WriteLine("Client registered");
} }
} }
@@ -73,5 +84,7 @@ public class NetworkGatewayModule : IGatewayModule
{ {
if (dependency is IConnectionHub interactionModule) if (dependency is IConnectionHub interactionModule)
_hub = interactionModule; _hub = interactionModule;
if (dependency is ISerializationToolkit serializationToolkit)
_serializationToolkit = serializationToolkit;
} }
} }
@@ -6,7 +6,7 @@ namespace mROA.Implementation;
public class NextGenerationInteractionModule : INextGenerationInteractionModule public class NextGenerationInteractionModule : INextGenerationInteractionModule
{ {
private ISerializationToolkit? _serialization; private ISerializationToolkit? _serialization;
public int ConntectionId { get; private set; } public int ConnectionId { get; private set; }
public Stream? BaseStream { get; set; } public Stream? BaseStream { get; set; }
private Task<NetworkMessage>? _currentReceiving; private Task<NetworkMessage>? _currentReceiving;
private const int BufferSize = ushort.MaxValue; private const int BufferSize = ushort.MaxValue;
@@ -20,7 +20,7 @@ public class NextGenerationInteractionModule : INextGenerationInteractionModule
_serialization = toolkit; _serialization = toolkit;
break; break;
case IIdentityGenerator identityGenerator: case IIdentityGenerator identityGenerator:
ConntectionId = identityGenerator.GetNextIdentity(); ConnectionId = identityGenerator.GetNextIdentity();
break; 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) public async Task<T> GetMessage<T>(Guid? requestId, MessageType? messageType)
{ {