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