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

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
+12 -4
View File
@@ -5,22 +5,30 @@ using mROA.Codegen;
using mROA.Implementation;
using mROA.Implementation.Backend;
using mROA.Implementation.Bootstrap;
using mROA.Implementation.Frontend;
var builder = new FullMixBuilder();
builder.UseJsonSerialisation();
builder.UseNetworkGateway(new IPEndPoint(IPAddress.Loopback, 4567));
builder.UseStreamInteraction();
builder.Modules.Add(new BackendIdentityGenerator());
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.Modules.Add(new RemoteContextRepository());
builder.UseCollectableContextRepository(typeof(PrinterFactory).Assembly);
builder.SetupMethodsRepository(new CoCodegenMethodRepository());
builder.Modules.Add(new CreativeSerializationModuleProducer([], typeof(JsonFrontendSerialisationModule)));
builder.Modules.Add(new CreativeSerializationModuleProducer([builder.GetModule<JsonSerializationToolkit>()!], typeof(RepresentationModule)));
builder.Build();
new RemoteTypeBinder();
TransmissionConfig.RealContextRepository = builder.GetModule<ContextRepository>();
TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule<RemoteContextRepository>();
TransmissionConfig.OwnershipRepository = new MultiClientOwnershipRepository();
var gateway = builder.GetModule<IGatewayModule>();
+3 -2
View File
@@ -9,9 +9,10 @@ using mROA.Implementation.Frontend;
var builder = new FullMixBuilder();
new RemoteTypeBinder();
builder.Modules.Add(new JsonSerializationToolkit());
builder.Modules.Add(new RemoteContextRepository());
builder.Modules.Add(new JsonFrontendSerialisationModule());
builder.Modules.Add(new StreamBasedFrontendInteractionModule());
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 BasicExecutionModule());
+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,13 +2,15 @@
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);
@@ -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)
{
@@ -60,11 +61,21 @@ public class NetworkGatewayModule : IGatewayModule
{
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)
{