добавлен мультиклиентский репозиторий
This commit is contained in:
@@ -19,14 +19,20 @@ 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.Modules.Add(new MultiClientContextRepository(i =>
|
||||||
|
{
|
||||||
|
var repo = new ContextRepository();
|
||||||
|
repo.FillSingletons(typeof(PrinterFactory).Assembly);
|
||||||
|
return repo;
|
||||||
|
}));
|
||||||
builder.SetupMethodsRepository(new CoCodegenMethodRepository());
|
builder.SetupMethodsRepository(new CoCodegenMethodRepository());
|
||||||
builder.Modules.Add(new CreativeSerializationModuleProducer([builder.GetModule<JsonSerializationToolkit>()!], typeof(RepresentationModule)));
|
builder.Modules.Add(new CreativeSerializationModuleProducer([builder.GetModule<JsonSerializationToolkit>()!], typeof(RepresentationModule)));
|
||||||
|
|
||||||
builder.Build();
|
builder.Build();
|
||||||
new RemoteTypeBinder();
|
new RemoteTypeBinder();
|
||||||
|
|
||||||
TransmissionConfig.RealContextRepository = builder.GetModule<ContextRepository>();
|
TransmissionConfig.RealContextRepository = builder.GetModule<MultiClientContextRepository>();
|
||||||
TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule<RemoteContextRepository>();
|
TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule<RemoteContextRepository>();
|
||||||
TransmissionConfig.OwnershipRepository = new MultiClientOwnershipRepository();
|
TransmissionConfig.OwnershipRepository = new MultiClientOwnershipRepository();
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule<RemoteCon
|
|||||||
|
|
||||||
builder.GetModule<NetworkFrontendBridge>()!.Connect();
|
builder.GetModule<NetworkFrontendBridge>()!.Connect();
|
||||||
_ = builder.GetModule<RequestExtractor>()!.StartExtraction();
|
_ = builder.GetModule<RequestExtractor>()!.StartExtraction();
|
||||||
Console.WriteLine(TransmissionConfig.OwnershipRepository!.GetOwnershipId());
|
Console.WriteLine(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
||||||
var context = builder.GetModule<RemoteContextRepository>();
|
var context = builder.GetModule<RemoteContextRepository>();
|
||||||
|
|
||||||
var factory = context.GetSingleObject(typeof(IPrinterFactory)) as IPrinterFactory;
|
var factory = context.GetSingleObject(typeof(IPrinterFactory)) as IPrinterFactory;
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
namespace mROA.Abstract;
|
||||||
|
|
||||||
|
public interface IContextRepositoryHub
|
||||||
|
{
|
||||||
|
IContextRepository GetRepository(int clientId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
using mROA.Abstract;
|
||||||
|
|
||||||
|
namespace mROA.Implementation.Backend;
|
||||||
|
|
||||||
|
public class MultiClientContextRepository(Func<int, IContextRepository> produceRepository) : IContextRepository, IContextRepositoryHub
|
||||||
|
{
|
||||||
|
private Dictionary<int, IContextRepository> _repositories = new();
|
||||||
|
|
||||||
|
private IContextRepository GetRepositoryByClientId(int clientId)
|
||||||
|
{
|
||||||
|
if (_repositories.TryGetValue(clientId, out var repository))
|
||||||
|
return repository;
|
||||||
|
|
||||||
|
var created = produceRepository(clientId);
|
||||||
|
_repositories.Add(clientId, created);
|
||||||
|
return created;
|
||||||
|
}
|
||||||
|
public void Inject<T>(T dependency)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public int ResisterObject(object o)
|
||||||
|
{
|
||||||
|
return GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()).ResisterObject(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClearObject(int id)
|
||||||
|
{
|
||||||
|
GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()).ClearObject(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public object GetObject(int id)
|
||||||
|
{
|
||||||
|
return GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()).GetObject(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public T? GetObject<T>(int id)
|
||||||
|
{
|
||||||
|
return GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()).GetObject<T>(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public object GetSingleObject(Type type)
|
||||||
|
{
|
||||||
|
return GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()).GetSingleObject(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetObjectIndex(object o)
|
||||||
|
{
|
||||||
|
return GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()).GetObjectIndex(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IContextRepository GetRepository(int clientId)
|
||||||
|
{
|
||||||
|
return _repositories[clientId];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,9 +5,28 @@ namespace mROA.Implementation;
|
|||||||
|
|
||||||
public static class TransmissionConfig
|
public static class TransmissionConfig
|
||||||
{
|
{
|
||||||
public static IContextRepository? RealContextRepository { get; set; }
|
private static IContextRepository? _realContextRepository;
|
||||||
public static IContextRepository? RemoteEndpointContextRepository { get; set; }
|
private static IContextRepository? _remoteEndpointContextRepository;
|
||||||
public static IOwnershipRepository? OwnershipRepository { get; set; }
|
private static IOwnershipRepository? _ownershipRepository;
|
||||||
|
|
||||||
|
public static IContextRepository RealContextRepository
|
||||||
|
{
|
||||||
|
get => _realContextRepository ?? throw new NullReferenceException("RealContextRepository is null");
|
||||||
|
set => _realContextRepository = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IContextRepository RemoteEndpointContextRepository
|
||||||
|
{
|
||||||
|
get => _remoteEndpointContextRepository ?? throw new NullReferenceException("RemoteEndpointContextRepository is null");
|
||||||
|
set => _remoteEndpointContextRepository = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IOwnershipRepository OwnershipRepository
|
||||||
|
{
|
||||||
|
get => _ownershipRepository ?? throw new NullReferenceException("OwnershipRepository is null");
|
||||||
|
set => _ownershipRepository = value;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SharedObject<T> where T : notnull
|
public class SharedObject<T> where T : notnull
|
||||||
|
|||||||
Reference in New Issue
Block a user