на пол пути к переделанному прямому вызову
This commit is contained in:
@@ -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();
|
||||||
@@ -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());
|
||||||
|
|||||||
@@ -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,6 +1,6 @@
|
|||||||
namespace mROA.Abstract;
|
namespace mROA.Abstract;
|
||||||
|
|
||||||
public interface IIdentityGenerator
|
public interface IIdentityGenerator : IInjectableModule
|
||||||
{
|
{
|
||||||
int GetNextIdentity();
|
int GetNextIdentity();
|
||||||
}
|
}
|
||||||
@@ -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)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+10
-2
@@ -2,13 +2,15 @@
|
|||||||
|
|
||||||
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);
|
||||||
@@ -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)
|
||||||
{
|
{
|
||||||
@@ -60,11 +61,21 @@ public class NetworkGatewayModule : IGatewayModule
|
|||||||
{
|
{
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user