предфинальное изменение сигнатуры интерфейса модуля исполнения

This commit is contained in:
2025-02-14 22:26:55 +03:00
parent 8c601c0183
commit 809cc05b0a
9 changed files with 69 additions and 61 deletions
+5
View File
@@ -24,4 +24,9 @@ public class PrinterFactory : IPrinterFactory
{ {
return new SharedObject<IPrinter>(_printers.Find(i => i.GetName() == printerName)!); return new SharedObject<IPrinter>(_printers.Find(i => i.GetName() == printerName)!);
} }
public string[] CollectAllNames()
{
return _printers.Select(i => i.GetName()).ToArray();
}
} }
+3 -1
View File
@@ -13,12 +13,14 @@ builder.UseJsonSerialisation();
builder.UseNetworkGateway(new IPEndPoint(IPAddress.Loopback, 4567)); builder.UseNetworkGateway(new IPEndPoint(IPAddress.Loopback, 4567));
builder.UseStreamInteraction(); builder.UseStreamInteraction();
builder.UseBasicExecution(); builder.UseBasicExecution();
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([], typeof(JsonFrontendSerialisationModule)));
builder.Build(); builder.Build();
new RemoteTypeBinder();
TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule<RemoteContextRepository>();
var gateway = builder.GetModule<IGatewayModule>() ; var gateway = builder.GetModule<IGatewayModule>() ;
+1
View File
@@ -7,6 +7,7 @@ public class ClientBasedPrinter : IPrinter
{ {
public string GetName() public string GetName()
{ {
Console.WriteLine("ClientBasedPrinter called from server!!!!!!!!!!! Vova likes that:)");
return "ClientBasedPrinter"; return "ClientBasedPrinter";
} }
+35 -39
View File
@@ -1,9 +1,4 @@
// See https://aka.ms/new-console-template for more information using System.Net;
using System.Diagnostics;
using System.Net;
using System.Text;
using Example.Frontend; using Example.Frontend;
using Example.Shared; using Example.Shared;
using mROA.Codegen; using mROA.Codegen;
@@ -12,47 +7,48 @@ using mROA.Implementation.Backend;
using mROA.Implementation.Bootstrap; using mROA.Implementation.Bootstrap;
using mROA.Implementation.Frontend; using mROA.Implementation.Frontend;
var builder = new FullMixBuilder();
var mixer = new FullMixBuilder();
new RemoteTypeBinder(); new RemoteTypeBinder();
mixer.Modules.Add(new RemoteContextRepository()); builder.Modules.Add(new RemoteContextRepository());
mixer.Modules.Add(new JsonFrontendSerialisationModule()); builder.Modules.Add(new JsonFrontendSerialisationModule());
mixer.Modules.Add(new StreamBasedFrontendInteractionModule()); builder.Modules.Add(new StreamBasedFrontendInteractionModule());
mixer.Modules.Add(new NetworkFrontendBridge(new IPEndPoint(IPAddress.Loopback, 4567))); builder.Modules.Add(new NetworkFrontendBridge(new IPEndPoint(IPAddress.Loopback, 4567)));
mixer.Modules.Add(new StaticSerialisationModuleProducer()); builder.Modules.Add(new StaticSerialisationModuleProducer());
mixer.UseCollectableContextRepository(); builder.UseCollectableContextRepository();
mixer.Build(); builder.Build();
TransmissionConfig.RealContextRepository = mixer.GetModule<ContextRepository>(); TransmissionConfig.RealContextRepository = builder.GetModule<ContextRepository>();
TransmissionConfig.RemoteEndpointContextRepository = mixer.GetModule<RemoteContextRepository>(); TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule<RemoteContextRepository>();
mixer.GetModule<NetworkFrontendBridge>().Connect(); builder.GetModule<NetworkFrontendBridge>().Connect();
Console.WriteLine(TransmissionConfig.OwnershipRepository.GetOwnershipId()); Console.WriteLine(TransmissionConfig.OwnershipRepository.GetOwnershipId());
var context = mixer.GetModule<RemoteContextRepository>(); var context = builder.GetModule<RemoteContextRepository>();
var factory = context.GetSingleObject(typeof(IPrinterFactory)) as IPrinterFactory; var factory = context.GetSingleObject(typeof(IPrinterFactory)) as IPrinterFactory;
var printer = factory.Create("Test"); var printer = factory.Create("Test");
var name = printer.Value.GetName(); // var name = printer.Value.GetName();
Console.WriteLine("Printer name : {0}", name); // Console.WriteLine("Printer name : {0}", name);
// factory.Register(new SharedObject<IPrinter>(new ClientBasedPrinter())); factory.Register(new SharedObject<IPrinter>(new ClientBasedPrinter()));
var page = await printer.Value.Print("Test Page", new CancellationToken()); // var names = factory.CollectAllNames();
var data = page.Value.GetData(); Console.ReadLine();
Console.WriteLine("Data : {0}", Encoding.UTF8.GetString(data)); // var page = await printer.Value.Print("Test Page", new CancellationToken());
// var data = page.Value.GetData();
var loadSingleton = context.GetSingleObject(typeof(ILoadTest)) as ILoadTest; // Console.WriteLine("Data : {0}", Encoding.UTF8.GetString(data));
//
const int iterations = 10000; // var loadSingleton = context.GetSingleObject(typeof(ILoadTest)) as ILoadTest;
var timer = Stopwatch.StartNew(); //
var x = 0; // const int iterations = 10000;
for (int i = 0; i < iterations; i++) // var timer = Stopwatch.StartNew();
{ // var x = 0;
x = loadSingleton.Next(x); // for (int i = 0; i < iterations; i++)
} // {
// x = loadSingleton.Next(x);
timer.Stop(); // }
Console.WriteLine("X is {0}", x); //
Console.WriteLine("Time : {0}", timer.Elapsed.TotalMilliseconds); // timer.Stop();
// Console.WriteLine("X is {0}", x);
// Console.WriteLine("Time : {0}", timer.Elapsed.TotalMilliseconds);
+2
View File
@@ -10,5 +10,7 @@ public interface IPrinterFactory
SharedObject<IPrinter> Create(string printerName); SharedObject<IPrinter> Create(string printerName);
void Register(SharedObject<IPrinter> printer); void Register(SharedObject<IPrinter> printer);
SharedObject<IPrinter> GetPrinterByName(string printerName); SharedObject<IPrinter> GetPrinterByName(string printerName);
string[] CollectAllNames();
} }
+1 -1
View File
@@ -4,5 +4,5 @@ namespace mROA.Abstract;
public interface IExecuteModule : IInjectableModule public interface IExecuteModule : IInjectableModule
{ {
ICommandExecution Execute(ICallRequest command); ICommandExecution Execute(ICallRequest command, IContextRepository executionContextRepository);
} }
@@ -6,22 +6,13 @@ namespace mROA.Implementation.Backend;
public class BasicExecutionModule : IExecuteModule public class BasicExecutionModule : IExecuteModule
{ {
private IMethodRepository? _methodRepo; private IMethodRepository? _methodRepo;
private IContextRepository? _contextRepo;
public void Inject<T>(T dependency) public void Inject<T>(T dependency)
{ {
switch (dependency) if (dependency is IMethodRepository methodRepo) _methodRepo = methodRepo;
{
case IMethodRepository methodRepo:
_methodRepo = methodRepo;
break;
case IContextRepository contextRepo:
_contextRepo = contextRepo;
break;
}
} }
public ICommandExecution Execute(ICallRequest command) public ICommandExecution Execute(ICallRequest command, IContextRepository _contextRepo)
{ {
if (_methodRepo is null) if (_methodRepo is null)
throw new NullReferenceException("Method repository was not defined"); throw new NullReferenceException("Method repository was not defined");
@@ -8,6 +8,7 @@ public class JsonSerialisationModule : ISerialisationModule
private IInteractionModule? _dataSource; private IInteractionModule? _dataSource;
private IExecuteModule? _executeModule; private IExecuteModule? _executeModule;
private IMethodRepository? _methodRepository; private IMethodRepository? _methodRepository;
private IContextRepository? _contextRepo;
public void HandleIncomingRequest(int clientId, byte[] message) public void HandleIncomingRequest(int clientId, byte[] message)
{ {
@@ -21,10 +22,11 @@ public class JsonSerialisationModule : ISerialisationModule
if (command.Parameter is not null) if (command.Parameter is not null)
{ {
var parameter = _methodRepository!.GetMethod(command.CommandId).GetParameters().First().ParameterType; var parameter = _methodRepository!.GetMethod(command.CommandId).GetParameters().First().ParameterType;
command.Parameter = ((JsonElement)command.Parameter).Deserialize(parameter); var jsElement = (JsonElement)command.Parameter;
command.Parameter = jsElement.Deserialize(parameter);
} }
var response = _executeModule!.Execute(command); var response = _executeModule!.Execute(command, _contextRepo);
response.ClientId = clientId; response.ClientId = clientId;
var resultType = response is FinalCommandExecution var resultType = response is FinalCommandExecution
? MessageType.FinishedCommandExecution ? MessageType.FinishedCommandExecution
@@ -52,11 +54,20 @@ public class JsonSerialisationModule : ISerialisationModule
public void Inject<T>(T dependency) public void Inject<T>(T dependency)
{ {
if (dependency is IInteractionModule interactionModule) switch (dependency)
{
case IInteractionModule interactionModule:
_dataSource = interactionModule; _dataSource = interactionModule;
if (dependency is IExecuteModule executeModule) break;
case IExecuteModule executeModule:
_executeModule = executeModule; _executeModule = executeModule;
if (dependency is IMethodRepository methodRepository) break;
case IMethodRepository methodRepository:
_methodRepository = methodRepository; _methodRepository = methodRepository;
break;
case IContextRepository contextRepository:
_contextRepo = contextRepository;
break;
}
} }
} }
+1 -1
View File
@@ -13,7 +13,7 @@ public static class TransmissionConfig
public class SharedObject<T> where T : notnull public class SharedObject<T> where T : notnull
{ {
private IContextRepository GetDefaultContextRepository() => private IContextRepository GetDefaultContextRepository() =>
(OwnerId == TransmissionConfig.OwnershipRepository!.GetOwnershipId() (OwnerId == TransmissionConfig.OwnershipRepository!.GetHostOwnershipId()
? TransmissionConfig.RealContextRepository ? TransmissionConfig.RealContextRepository
: TransmissionConfig.RemoteEndpointContextRepository) ?? : TransmissionConfig.RemoteEndpointContextRepository) ??
throw new NullReferenceException( throw new NullReferenceException(