78 lines
2.6 KiB
C#
78 lines
2.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using mROA.Abstract;
|
|
|
|
namespace mROA.Implementation.Backend
|
|
{
|
|
public class MultiClientContextRepository : IContextRepository, IContextRepositoryHub
|
|
{
|
|
private Dictionary<int, IContextRepository> _repositories = new();
|
|
private readonly Func<int, IContextRepository> _produceRepository;
|
|
|
|
public MultiClientContextRepository(Func<int, IContextRepository> produceRepository)
|
|
{
|
|
_produceRepository = produceRepository;
|
|
}
|
|
|
|
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)
|
|
{
|
|
var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
|
return repository.ResisterObject(o);
|
|
}
|
|
|
|
public void ClearObject(int id)
|
|
{
|
|
var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
|
repository.ClearObject(id);
|
|
}
|
|
|
|
public T GetObjectBySharedObject<T>(SharedObject<T> sharedObject)
|
|
{
|
|
var repository = GetRepository(sharedObject.OwnerId);
|
|
return repository.GetObject<T>(sharedObject.ContextId);
|
|
}
|
|
|
|
public object GetObject(int id)
|
|
{
|
|
var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
|
return repository.GetObject<object>(id);
|
|
}
|
|
|
|
public T? GetObject<T>(int id)
|
|
{
|
|
var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
|
return repository.GetObject<T>(id);
|
|
}
|
|
|
|
public object GetSingleObject(Type type)
|
|
{
|
|
var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
|
return repository.GetSingleObject(type);
|
|
}
|
|
|
|
public int GetObjectIndex(object o)
|
|
{
|
|
var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
|
return repository.GetObjectIndex(o);
|
|
}
|
|
|
|
public IContextRepository GetRepository(int clientId)
|
|
{
|
|
var repository = GetRepositoryByClientId(clientId);
|
|
return repository;
|
|
}
|
|
}
|
|
} |