предфинальное изменение сигнатуры интерфейса модуля исполнения
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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>() ;
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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);
|
||||||
@@ -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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
_dataSource = interactionModule;
|
{
|
||||||
if (dependency is IExecuteModule executeModule)
|
case IInteractionModule interactionModule:
|
||||||
_executeModule = executeModule;
|
_dataSource = interactionModule;
|
||||||
if (dependency is IMethodRepository methodRepository)
|
break;
|
||||||
_methodRepository = methodRepository;
|
case IExecuteModule executeModule:
|
||||||
|
_executeModule = executeModule;
|
||||||
|
break;
|
||||||
|
case IMethodRepository methodRepository:
|
||||||
|
_methodRepository = methodRepository;
|
||||||
|
break;
|
||||||
|
case IContextRepository contextRepository:
|
||||||
|
_contextRepo = contextRepository;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user