Прокидывание контекста конечной точки в регистрацию объекта
This commit is contained in:
@@ -5,11 +5,11 @@ namespace mROA.Abstract
|
||||
{
|
||||
public interface IContextRepository : IInjectableModule
|
||||
{
|
||||
int ResisterObject(object o);
|
||||
int ResisterObject(object o, IEndPointContext context);
|
||||
void ClearObject(int id);
|
||||
T GetObjectBySharedObject<T>(SharedObjectShellShell<T> sharedObjectShellShell);
|
||||
T? GetObject<T>(int id);
|
||||
object GetSingleObject(Type type);
|
||||
int GetObjectIndex(object o);
|
||||
int GetObjectIndex(object o, IEndPointContext context);
|
||||
}
|
||||
}
|
||||
@@ -39,7 +39,7 @@ namespace mROA.Implementation.Backend
|
||||
Activator.CreateInstance);
|
||||
}
|
||||
|
||||
public int ResisterObject(object o)
|
||||
public int ResisterObject(object o, IEndPointContext context)
|
||||
{
|
||||
if (!_lastIndexFinder.IsCompleted)
|
||||
_lastIndexFinder.Wait();
|
||||
@@ -79,10 +79,10 @@ namespace mROA.Implementation.Backend
|
||||
return _singletons.GetValueOrDefault(type.GetHashCode()) ?? throw new ArgumentException("Unregistered singleton type");
|
||||
}
|
||||
|
||||
public int GetObjectIndex(object o)
|
||||
public int GetObjectIndex(object o, IEndPointContext context)
|
||||
{
|
||||
var index = Array.IndexOf(_storage, o);
|
||||
return index == -1 ? ResisterObject(o) : index;
|
||||
return index == -1 ? ResisterObject(o, context) : index;
|
||||
}
|
||||
|
||||
private int FindLastIndex()
|
||||
|
||||
@@ -27,10 +27,10 @@ namespace mROA.Implementation.Backend
|
||||
{
|
||||
}
|
||||
|
||||
public int ResisterObject(object o)
|
||||
public int ResisterObject(object o, IEndPointContext context)
|
||||
{
|
||||
var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
||||
return repository.ResisterObject(o);
|
||||
return repository.ResisterObject(o, context);
|
||||
}
|
||||
|
||||
public void ClearObject(int id)
|
||||
@@ -63,10 +63,10 @@ namespace mROA.Implementation.Backend
|
||||
return repository.GetSingleObject(type);
|
||||
}
|
||||
|
||||
public int GetObjectIndex(object o)
|
||||
public int GetObjectIndex(object o, IEndPointContext context)
|
||||
{
|
||||
var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
||||
return repository.GetObjectIndex(o);
|
||||
return repository.GetObjectIndex(o, context);
|
||||
}
|
||||
|
||||
public IContextRepository GetRepository(int clientId)
|
||||
|
||||
@@ -39,7 +39,9 @@ namespace mROA.Implementation.Frontend
|
||||
}
|
||||
}
|
||||
|
||||
public async Task StartExtraction()
|
||||
public Task StartExtraction()
|
||||
{
|
||||
return Task.Run(() =>
|
||||
{
|
||||
if (_serializationToolkit == null)
|
||||
throw new NullReferenceException("Serializing toolkit is null.");
|
||||
@@ -52,7 +54,7 @@ namespace mROA.Implementation.Frontend
|
||||
if (_methodRepository == null)
|
||||
throw new NullReferenceException("Method repository is null.");
|
||||
|
||||
await Task.Yield();
|
||||
// await Task.Yield();
|
||||
|
||||
var multiClientOwnershipRepository =
|
||||
TransmissionConfig.OwnershipRepository as MultiClientOwnershipRepository;
|
||||
@@ -117,6 +119,7 @@ namespace mROA.Implementation.Frontend
|
||||
{
|
||||
multiClientOwnershipRepository?.FreeOwnership();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@ namespace mROA.Implementation
|
||||
private IRepresentationModuleProducer? _representationProducer;
|
||||
public static Dictionary<Type, Type> RemoteTypes = new();
|
||||
|
||||
public int ResisterObject(object o)
|
||||
public int ResisterObject(object o, IEndPointContext context)
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
@@ -58,7 +58,7 @@ namespace mROA.Implementation
|
||||
representationModule)!;
|
||||
}
|
||||
|
||||
public int GetObjectIndex(object o)
|
||||
public int GetObjectIndex(object o, IEndPointContext context)
|
||||
{
|
||||
if (o is RemoteObjectBase remote)
|
||||
{
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace mROA.Implementation
|
||||
else
|
||||
{
|
||||
_identifier.OwnerId = EndPointContext.HostId;
|
||||
_identifier.ContextId = EndPointContext.RealRepository.GetObjectIndex(Value);
|
||||
_identifier.ContextId = EndPointContext.RealRepository.GetObjectIndex(Value, EndPointContext);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user