Local endpoint added successful and negative ownerId implemented
This commit is contained in:
@@ -8,7 +8,7 @@ namespace Example.Backend
|
|||||||
{
|
{
|
||||||
public class PagesList : RemoteObjectBase, IPagesList
|
public class PagesList : RemoteObjectBase, IPagesList
|
||||||
{
|
{
|
||||||
public PagesList(int id, IRepresentationModule representationModule) : base(id, representationModule)
|
public PagesList(int id, IRepresentationModule representationModule,IEndPointContext context) : base(id, representationModule, context)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,9 +45,6 @@ class Program
|
|||||||
builder.Build();
|
builder.Build();
|
||||||
new RemoteTypeBinder();
|
new RemoteTypeBinder();
|
||||||
|
|
||||||
TransmissionConfig.RealContextRepository = builder.GetModule<MultiClientContextRepository>()!;
|
|
||||||
TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule<RemoteContextRepository>()!;
|
|
||||||
TransmissionConfig.OwnershipRepository = new MultiClientOwnershipRepository();
|
|
||||||
|
|
||||||
_ = builder.GetModule<UdpGateway>()!.Start();
|
_ = builder.GetModule<UdpGateway>()!.Start();
|
||||||
var gateway = builder.GetModule<IGatewayModule>();
|
var gateway = builder.GetModule<IGatewayModule>();
|
||||||
|
|||||||
@@ -38,20 +38,16 @@ class Program
|
|||||||
|
|
||||||
builder.Build();
|
builder.Build();
|
||||||
|
|
||||||
|
|
||||||
TransmissionConfig.RealContextRepository = builder.GetModule<ContextRepository>();
|
|
||||||
TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule<RemoteContextRepository>();
|
|
||||||
|
|
||||||
var frontendBridge = builder.GetModule<IFrontendBridge>()!;
|
var frontendBridge = builder.GetModule<IFrontendBridge>()!;
|
||||||
frontendBridge.Connect();
|
frontendBridge.Connect();
|
||||||
_ = builder.GetModule<RequestExtractor>()!.StartExtraction();
|
_ = builder.GetModule<RequestExtractor>()!.StartExtraction();
|
||||||
_ = builder.GetModule<UdpUntrustedInteraction>().Start(serverEndPoint);
|
_ = builder.GetModule<UdpUntrustedInteraction>().Start(serverEndPoint);
|
||||||
Console.WriteLine(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
Console.WriteLine(builder.GetModule<IEndPointContext>().HostId);
|
||||||
var context = builder.GetModule<RemoteContextRepository>();
|
var context = builder.GetModule<RemoteContextRepository>();
|
||||||
|
|
||||||
var factory =
|
var factory =
|
||||||
context.GetSingleObject(typeof(IPrinterFactory),
|
context.GetSingleObject(typeof(IPrinterFactory),
|
||||||
-TransmissionConfig.OwnershipRepository.GetHostOwnershipId()) as IPrinterFactory;
|
builder.GetModule<IEndPointContext>()) as IPrinterFactory;
|
||||||
|
|
||||||
using (var disposingPrinter = factory.Create("Test"))
|
using (var disposingPrinter = factory.Create("Test"))
|
||||||
{
|
{
|
||||||
@@ -89,7 +85,7 @@ class Program
|
|||||||
var names = factory.CollectAllNames();
|
var names = factory.CollectAllNames();
|
||||||
Thread.Sleep(100);
|
Thread.Sleep(100);
|
||||||
|
|
||||||
Console.WriteLine(string.Join(", ", names));
|
Console.WriteLine("Names: " + string.Join(", ", names));
|
||||||
|
|
||||||
var page = disposingPrinter.Print("Test Page", false, default, CancellationToken.None).GetAwaiter()
|
var page = disposingPrinter.Print("Test Page", false, default, CancellationToken.None).GetAwaiter()
|
||||||
.GetResult();
|
.GetResult();
|
||||||
@@ -114,7 +110,7 @@ class Program
|
|||||||
DemoCheck.Dispose = true;
|
DemoCheck.Dispose = true;
|
||||||
|
|
||||||
|
|
||||||
var loadSingleton = context.GetSingleObject(typeof(ILoadTest), 0) as ILoadTest;
|
var loadSingleton = context.GetSingleObject(typeof(ILoadTest), builder.GetModule<IEndPointContext>()) as ILoadTest;
|
||||||
|
|
||||||
|
|
||||||
var cts = new CancellationTokenSource();
|
var cts = new CancellationTokenSource();
|
||||||
|
|||||||
@@ -216,10 +216,8 @@ namespace mROA.Cbor
|
|||||||
var generic = obj.GetType().GetInterfaces().FirstOrDefault(i => typeof(IShared).IsAssignableFrom(i));
|
var generic = obj.GetType().GetInterfaces().FirstOrDefault(i => typeof(IShared).IsAssignableFrom(i));
|
||||||
var sharedShell = typeof(SharedObjectShellShell<>).MakeGenericType(generic);
|
var sharedShell = typeof(SharedObjectShellShell<>).MakeGenericType(generic);
|
||||||
var so =
|
var so =
|
||||||
Activator.CreateInstance(sharedShell, obj) as
|
Activator.CreateInstance(sharedShell, obj, context) as
|
||||||
ISharedObjectShell;
|
ISharedObjectShell;
|
||||||
if (context != null)
|
|
||||||
so.EndPointContext = context;
|
|
||||||
|
|
||||||
writer.WriteStartArray(1);
|
writer.WriteStartArray(1);
|
||||||
writer.WriteUInt64(so.Identifier.Flat);
|
writer.WriteUInt64(so.Identifier.Flat);
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ namespace <!L namespaceName>
|
|||||||
partial class <!L className>
|
partial class <!L className>
|
||||||
: RemoteObjectBase, <!L originalName>
|
: RemoteObjectBase, <!L originalName>
|
||||||
{
|
{
|
||||||
public <!L className>(int id, IRepresentationModule representationModule)
|
public <!L className>(int id, IRepresentationModule representationModule, IEndPointContext context)
|
||||||
: base(id, representationModule)
|
: base(id, representationModule, context)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ namespace mROA.Codegen
|
|||||||
Parameters = new object[] { <!L transferParameters> }
|
Parameters = new object[] { <!L transferParameters> }
|
||||||
};
|
};
|
||||||
|
|
||||||
module.PostCallMessageAsync(request.Id, EMessageType.EventRequest, request);
|
module.PostCallMessageAsync(request.Id, EMessageType.EventRequest, request, context);
|
||||||
};
|
};
|
||||||
<!T>
|
<!T>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
using mROA.Implementation;
|
||||||
|
|
||||||
|
namespace mROA.Test;
|
||||||
|
|
||||||
|
[TestFixture]
|
||||||
|
public class Identifier
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void TestParse()
|
||||||
|
{
|
||||||
|
var id = new ComplexObjectIdentifier(-1, -1);
|
||||||
|
var flat = id.Flat;
|
||||||
|
var next = new ComplexObjectIdentifier { Flat = flat };
|
||||||
|
if (id.Equals(next))
|
||||||
|
{
|
||||||
|
Assert.Pass();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Assert.Fail();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -23,8 +23,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mROA.Cbor", "mROA.Cbor\mROA
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TotalDemo", "TotalDemo", "{FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TotalDemo", "TotalDemo", "{FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Codegen", "Codegen", "{3DB22457-E65B-426F-B3DD-08C615132B3E}"
|
|
||||||
EndProject
|
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -72,6 +70,5 @@ Global
|
|||||||
{A9BB364E-0BA6-40B9-A293-757BC48EFC06} = {FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E}
|
{A9BB364E-0BA6-40B9-A293-757BC48EFC06} = {FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E}
|
||||||
{9BD25A13-3165-47C0-9EAA-5C59EC490E32} = {FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E}
|
{9BD25A13-3165-47C0-9EAA-5C59EC490E32} = {FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E}
|
||||||
{E7703F5B-F2A6-4A88-AA57-EBB1E38D533E} = {FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E}
|
{E7703F5B-F2A6-4A88-AA57-EBB1E38D533E} = {FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E}
|
||||||
{3DB22457-E65B-426F-B3DD-08C615132B3E} = {EAE92F5A-664C-41AB-8811-5885524B5347}
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ namespace mROA.Abstract
|
|||||||
{
|
{
|
||||||
int HostId { get; set; }
|
int HostId { get; set; }
|
||||||
int ResisterObject<T>(object o, IEndPointContext context);
|
int ResisterObject<T>(object o, IEndPointContext context);
|
||||||
void ClearObject(ComplexObjectIdentifier id);
|
void ClearObject(ComplexObjectIdentifier id, IEndPointContext context);
|
||||||
T GetObject<T>(ComplexObjectIdentifier id, IEndPointContext context);
|
T GetObject<T>(ComplexObjectIdentifier id, IEndPointContext context);
|
||||||
object GetSingleObject(Type type, int ownerId);
|
object GetSingleObject(Type type, IEndPointContext context);
|
||||||
int GetObjectIndex<T>(object o, IEndPointContext context);
|
int GetObjectIndex<T>(object o, IEndPointContext context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,6 @@ namespace mROA.Abstract
|
|||||||
{
|
{
|
||||||
public interface IRemoteObjectFactory : IInjectableModule
|
public interface IRemoteObjectFactory : IInjectableModule
|
||||||
{
|
{
|
||||||
T Produce<T>(ComplexObjectIdentifier id);
|
T Produce<T>(ComplexObjectIdentifier id, IEndPointContext context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,7 @@ namespace mROA.Implementation.Backend
|
|||||||
|
|
||||||
public int GetNextIdentity()
|
public int GetNextIdentity()
|
||||||
{
|
{
|
||||||
return ++_currentId;
|
return -++_currentId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Inject<T>(T dependency)
|
public void Inject<T>(T dependency)
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ namespace mROA.Implementation.Backend
|
|||||||
{
|
{
|
||||||
var repo = new ContextRepository();
|
var repo = new ContextRepository();
|
||||||
repo.FillSingletons(assemblies);
|
repo.FillSingletons(assemblies);
|
||||||
TransmissionConfig.RealContextRepository = repo;
|
|
||||||
builder.Modules.Add(repo);
|
builder.Modules.Add(repo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ namespace mROA.Implementation.Backend
|
|||||||
#if TRACE
|
#if TRACE
|
||||||
Console.WriteLine("Disposing object");
|
Console.WriteLine("Disposing object");
|
||||||
#endif
|
#endif
|
||||||
contextRepository.ClearObject(command.ObjectId);
|
contextRepository.ClearObject(command.ObjectId, endPointContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -100,7 +100,7 @@ namespace mROA.Implementation.Backend
|
|||||||
{
|
{
|
||||||
var context = command.ObjectId.ContextId != -1
|
var context = command.ObjectId.ContextId != -1
|
||||||
? contextRepository.GetObject<object>(command.ObjectId, endPointContext)
|
? contextRepository.GetObject<object>(command.ObjectId, endPointContext)
|
||||||
: contextRepository.GetSingleObject(invoker.SuitableType, command.ObjectId.OwnerId);
|
: contextRepository.GetSingleObject(invoker.SuitableType, endPointContext);
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,14 +205,10 @@ namespace mROA.Implementation.Backend
|
|||||||
};
|
};
|
||||||
_cancellationRepo?.FreeCancelation(command.Id);
|
_cancellationRepo?.FreeCancelation(command.Id);
|
||||||
|
|
||||||
var multiClientOwnershipRepository =
|
|
||||||
TransmissionConfig.OwnershipRepository as MultiClientOwnershipRepository;
|
|
||||||
|
|
||||||
multiClientOwnershipRepository?.RegisterOwnership(representationModule.Id);
|
|
||||||
if (invoker.IsTrusted)
|
if (invoker.IsTrusted)
|
||||||
representationModule.PostCallMessage(command.Id, EMessageType.FinishedCommandExecution,
|
representationModule.PostCallMessage(command.Id, EMessageType.FinishedCommandExecution,
|
||||||
payload, context);
|
payload, context);
|
||||||
multiClientOwnershipRepository?.FreeOwnership();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return new AsyncCommandExecution
|
return new AsyncCommandExecution
|
||||||
@@ -255,12 +251,8 @@ namespace mROA.Implementation.Backend
|
|||||||
};
|
};
|
||||||
_cancellationRepo!.FreeCancelation(command.Id);
|
_cancellationRepo!.FreeCancelation(command.Id);
|
||||||
|
|
||||||
var multiClientOwnershipRepository =
|
|
||||||
TransmissionConfig.OwnershipRepository as MultiClientOwnershipRepository;
|
|
||||||
multiClientOwnershipRepository?.RegisterOwnership(representationModule.Id);
|
|
||||||
representationModule.PostCallMessage(command.Id, EMessageType.FinishedCommandExecution,
|
representationModule.PostCallMessage(command.Id, EMessageType.FinishedCommandExecution,
|
||||||
payload, context);
|
payload, context);
|
||||||
multiClientOwnershipRepository?.FreeOwnership();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return new AsyncCommandExecution
|
return new AsyncCommandExecution
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ namespace mROA.Implementation.Backend
|
|||||||
|
|
||||||
public IChannelInteractionModule GetInteraction(int id)
|
public IChannelInteractionModule GetInteraction(int id)
|
||||||
{
|
{
|
||||||
return _connections!.GetValueOrDefault(id, null) ?? throw new Exception("No connection found");
|
return _connections!.GetValueOrDefault(id, null) ?? _connections!.GetValueOrDefault(-id, null) ?? throw new Exception("No connection found");
|
||||||
}
|
}
|
||||||
|
|
||||||
public event ConnectionHandler? OnConnected;
|
public event ConnectionHandler? OnConnected;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ namespace mROA.Implementation.Backend
|
|||||||
return last;
|
return last;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearObject(ComplexObjectIdentifier id)
|
public void ClearObject(ComplexObjectIdentifier id, IEndPointContext context)
|
||||||
{
|
{
|
||||||
_storage.Free(id.ContextId);
|
_storage.Free(id.ContextId);
|
||||||
}
|
}
|
||||||
@@ -56,7 +56,7 @@ namespace mROA.Implementation.Backend
|
|||||||
return (T)value;
|
return (T)value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public object GetSingleObject(Type type, int ownerId)
|
public object GetSingleObject(Type type, IEndPointContext context)
|
||||||
{
|
{
|
||||||
return _singletons.GetValueOrDefault(type.GetHashCode()) ??
|
return _singletons.GetValueOrDefault(type.GetHashCode()) ??
|
||||||
throw new ArgumentException("Unregistered singleton type");
|
throw new ArgumentException("Unregistered singleton type");
|
||||||
|
|||||||
@@ -57,16 +57,17 @@ namespace mROA.Implementation.Backend
|
|||||||
var extractor = new RequestExtractor();
|
var extractor = new RequestExtractor();
|
||||||
var context = new EndPointContext
|
var context = new EndPointContext
|
||||||
{
|
{
|
||||||
HostId = 0, OwnerId = interaction.Id
|
HostId = 0, OwnerId = -interaction.Id
|
||||||
};
|
};
|
||||||
extractor.Inject(interaction);
|
extractor.Inject(interaction);
|
||||||
|
|
||||||
if (_contextRepository is IContextRepositoryHub contextHub)
|
if (_contextRepository is IContextRepositoryHub contextHub)
|
||||||
context.RealRepository = contextHub.GetRepository(interaction.Id);
|
context.RealRepository = contextHub.GetRepository(interaction.Id);
|
||||||
else
|
else
|
||||||
context.RealRepository = _contextRepository!;
|
context.RealRepository = _contextRepository!;
|
||||||
|
|
||||||
context.RemoteRepository = _remoteContextRepository!;
|
context.RemoteRepository = _remoteContextRepository!;
|
||||||
|
|
||||||
|
extractor.Inject(context);
|
||||||
extractor.Inject(_methodRepository);
|
extractor.Inject(_methodRepository);
|
||||||
extractor.Inject(_serializationToolkit);
|
extractor.Inject(_serializationToolkit);
|
||||||
extractor.Inject(_executeModule);
|
extractor.Inject(_executeModule);
|
||||||
|
|||||||
@@ -22,31 +22,31 @@ namespace mROA.Implementation.Backend
|
|||||||
|
|
||||||
public int ResisterObject<T>(object o, IEndPointContext context)
|
public int ResisterObject<T>(object o, IEndPointContext context)
|
||||||
{
|
{
|
||||||
var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
var repository = GetRepositoryByClientId(context.OwnerId);
|
||||||
return repository.ResisterObject<T>(o, context);
|
return repository.ResisterObject<T>(o, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearObject(ComplexObjectIdentifier id)
|
public void ClearObject(ComplexObjectIdentifier id, IEndPointContext context)
|
||||||
{
|
{
|
||||||
var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
var repository = GetRepositoryByClientId(context.OwnerId);
|
||||||
repository.ClearObject(id);
|
repository.ClearObject(id, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public T GetObject<T>(ComplexObjectIdentifier id, IEndPointContext context)
|
public T GetObject<T>(ComplexObjectIdentifier id, IEndPointContext context)
|
||||||
{
|
{
|
||||||
var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
var repository = GetRepositoryByClientId(context.OwnerId);
|
||||||
return repository.GetObject<T>(id, context);
|
return repository.GetObject<T>(id, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public object GetSingleObject(Type type, int ownerId)
|
public object GetSingleObject(Type type, IEndPointContext context)
|
||||||
{
|
{
|
||||||
var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
var repository = GetRepositoryByClientId(context.OwnerId);
|
||||||
return repository.GetSingleObject(type, ownerId);
|
return repository.GetSingleObject(type, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int GetObjectIndex<T>(object o, IEndPointContext context)
|
public int GetObjectIndex<T>(object o, IEndPointContext context)
|
||||||
{
|
{
|
||||||
var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
var repository = GetRepositoryByClientId(context.OwnerId);
|
||||||
return repository.GetObjectIndex<T>(o, context);
|
return repository.GetObjectIndex<T>(o, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -94,11 +94,11 @@ namespace mROA.Implementation.Backend
|
|||||||
{
|
{
|
||||||
case EMessageType.ClientConnect:
|
case EMessageType.ClientConnect:
|
||||||
context.HostId = 0;
|
context.HostId = 0;
|
||||||
context.OwnerId = interaction.ConnectionId;
|
context.OwnerId = -interaction.ConnectionId;
|
||||||
Task.Run(async () => await streamExtractor.LoopedReceive(cts.Token));
|
Task.Run(async () => await streamExtractor.LoopedReceive(cts.Token));
|
||||||
_ = streamExtractor.SendFromChannel(interaction.TrustedPostChanel, cts.Token);
|
_ = streamExtractor.SendFromChannel(interaction.TrustedPostChanel, cts.Token);
|
||||||
interaction.PostMessageAsync(new NetworkMessageHeader(_serialization!,
|
interaction.PostMessageAsync(new NetworkMessageHeader(_serialization!,
|
||||||
new IdAssignment { Id = -interaction.ConnectionId }, null));
|
new IdAssignment { Id = interaction.ConnectionId }, null));
|
||||||
_extractorsCTS[interaction.ConnectionId] = cts;
|
_extractorsCTS[interaction.ConnectionId] = cts;
|
||||||
_hub!.RegisterInteraction(interaction);
|
_hub!.RegisterInteraction(interaction);
|
||||||
Console.WriteLine("Client registered");
|
Console.WriteLine("Client registered");
|
||||||
@@ -108,7 +108,7 @@ namespace mROA.Implementation.Backend
|
|||||||
var recoveryRequest = _serialization!.Deserialize<ClientRecovery>(connectionRequest.Data, null);
|
var recoveryRequest = _serialization!.Deserialize<ClientRecovery>(connectionRequest.Data, null);
|
||||||
var recoveryInteraction = _hub.GetInteraction(recoveryRequest.Id);
|
var recoveryInteraction = _hub.GetInteraction(recoveryRequest.Id);
|
||||||
|
|
||||||
_extractorsCTS[recoveryRequest.Id].Cancel();
|
_extractorsCTS[-recoveryRequest.Id].Cancel();
|
||||||
|
|
||||||
recoveryInteraction.IsConnected = () => streamExtractor.IsConnected;
|
recoveryInteraction.IsConnected = () => streamExtractor.IsConnected;
|
||||||
streamExtractor.MessageReceived = message =>
|
streamExtractor.MessageReceived = message =>
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ namespace mROA.Implementation
|
|||||||
return placedIndex;
|
return placedIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearObject(ComplexObjectIdentifier id)
|
public void ClearObject(ComplexObjectIdentifier id, IEndPointContext context)
|
||||||
{
|
{
|
||||||
_storages.Find(i => i.Key == id.OwnerId).Value.Free(id.ContextId);
|
_storages.Find(i => i.Key == id.OwnerId).Value.Free(id.ContextId);
|
||||||
}
|
}
|
||||||
@@ -57,7 +57,7 @@ namespace mROA.Implementation
|
|||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public object GetSingleObject(Type type, int ownerId)
|
public object GetSingleObject(Type type, IEndPointContext context)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace mROA.Implementation
|
|||||||
|
|
||||||
public ulong Flat
|
public ulong Flat
|
||||||
{
|
{
|
||||||
get => (ulong)OwnerId << 32 | (uint)ContextId;
|
get => (ulong)((long)OwnerId << 32 | (uint)ContextId);
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
OwnerId = (int)(value >> 32);
|
OwnerId = (int)(value >> 32);
|
||||||
|
|||||||
@@ -73,7 +73,6 @@ namespace mROA.Implementation.Frontend
|
|||||||
|
|
||||||
var assignment = _serialization.Deserialize<IdAssignment>(idMessage.Data, _context);
|
var assignment = _serialization.Deserialize<IdAssignment>(idMessage.Data, _context);
|
||||||
_interactionModule.ConnectionId = -assignment.Id;
|
_interactionModule.ConnectionId = -assignment.Id;
|
||||||
TransmissionConfig.OwnershipRepository = new StaticOwnershipRepository(assignment.Id);
|
|
||||||
_context.HostId = assignment.Id;
|
_context.HostId = assignment.Id;
|
||||||
_context.OwnerId = assignment.Id;
|
_context.OwnerId = assignment.Id;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ namespace mROA.Implementation.Frontend
|
|||||||
var initMessage = new NetworkMessageHeader
|
var initMessage = new NetworkMessageHeader
|
||||||
{
|
{
|
||||||
MessageType = EMessageType.UntrustedConnect, Id = Guid.NewGuid(),
|
MessageType = EMessageType.UntrustedConnect, Id = Guid.NewGuid(),
|
||||||
Data = BitConverter.GetBytes(Math.Abs(_channelInteractionModule.ConnectionId))
|
Data = BitConverter.GetBytes(_channelInteractionModule.ConnectionId)
|
||||||
};
|
};
|
||||||
|
|
||||||
var initParsed = _serializationToolkit.Serialize(initMessage, _context);
|
var initParsed = _serializationToolkit.Serialize(initMessage, _context);
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace mROA.Implementation
|
|||||||
throw new NotSupportedException();
|
throw new NotSupportedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearObject(ComplexObjectIdentifier id)
|
public void ClearObject(ComplexObjectIdentifier id, IEndPointContext context)
|
||||||
{
|
{
|
||||||
throw new NotSupportedException();
|
throw new NotSupportedException();
|
||||||
}
|
}
|
||||||
@@ -33,7 +33,7 @@ namespace mROA.Implementation
|
|||||||
|
|
||||||
if (!RemoteTypes.TryGetValue(typeof(T), out var remoteType)) throw new NotSupportedException();
|
if (!RemoteTypes.TryGetValue(typeof(T), out var remoteType)) throw new NotSupportedException();
|
||||||
var representationModule =
|
var representationModule =
|
||||||
_representationProducer.Produce(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
_representationProducer.Produce(context.OwnerId);
|
||||||
var remote = (T)Activator.CreateInstance(remoteType, id.ContextId,
|
var remote = (T)Activator.CreateInstance(remoteType, id.ContextId,
|
||||||
representationModule, context)!;
|
representationModule, context)!;
|
||||||
|
|
||||||
@@ -42,16 +42,16 @@ namespace mROA.Implementation
|
|||||||
return remote;
|
return remote;
|
||||||
}
|
}
|
||||||
|
|
||||||
public object GetSingleObject(Type type, int ownerId)
|
public object GetSingleObject(Type type, IEndPointContext context)
|
||||||
{
|
{
|
||||||
if (_representationProducer == null)
|
if (_representationProducer == null)
|
||||||
throw new NullReferenceException("representation producer is not initialized");
|
throw new NullReferenceException("representation producer is not initialized");
|
||||||
|
|
||||||
var representationModule =
|
var representationModule =
|
||||||
_representationProducer.Produce(ownerId);
|
_representationProducer.Produce(context.OwnerId);
|
||||||
|
|
||||||
_producedRemoteEndpoints.Add((Activator.CreateInstance(RemoteTypes[type], -1,
|
_producedRemoteEndpoints.Add((Activator.CreateInstance(RemoteTypes[type], -1,
|
||||||
representationModule) as RemoteObjectBase)!);
|
representationModule, context) as RemoteObjectBase)!);
|
||||||
|
|
||||||
return _producedRemoteEndpoints.Last();
|
return _producedRemoteEndpoints.Last();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ namespace mROA.Implementation
|
|||||||
public static Dictionary<Type, Type> RemoteTypes = new();
|
public static Dictionary<Type, Type> RemoteTypes = new();
|
||||||
private IRepresentationModuleProducer? _representationProducer;
|
private IRepresentationModuleProducer? _representationProducer;
|
||||||
|
|
||||||
public T Produce<T>(ComplexObjectIdentifier id)
|
public T Produce<T>(ComplexObjectIdentifier id, IEndPointContext context)
|
||||||
{
|
{
|
||||||
if (_representationProducer == null)
|
if (_representationProducer == null)
|
||||||
throw new NullReferenceException("representation producer is not initialized");
|
throw new NullReferenceException("representation producer is not initialized");
|
||||||
|
|
||||||
if (!RemoteTypes.TryGetValue(typeof(T), out var remoteType)) throw new NotSupportedException();
|
if (!RemoteTypes.TryGetValue(typeof(T), out var remoteType)) throw new NotSupportedException();
|
||||||
var representationModule =
|
var representationModule =
|
||||||
_representationProducer.Produce(TransmissionConfig.OwnershipRepository.GetOwnershipId());
|
_representationProducer.Produce(context.OwnerId);
|
||||||
var remote = (T)Activator.CreateInstance(remoteType, id.ContextId,
|
var remote = (T)Activator.CreateInstance(remoteType, id.ContextId,
|
||||||
representationModule)!;
|
representationModule)!;
|
||||||
return remote;
|
return remote;
|
||||||
|
|||||||
@@ -55,7 +55,8 @@ namespace mROA.Implementation
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async IAsyncEnumerable<(object parced, EMessageType originalType)> GetStream(
|
public async IAsyncEnumerable<(object parced, EMessageType originalType)> GetStream(
|
||||||
Predicate<NetworkMessageHeader> rule, IEndPointContext? context, [EnumeratorCancellation] CancellationToken token = default,
|
Predicate<NetworkMessageHeader> rule, IEndPointContext? context,
|
||||||
|
[EnumeratorCancellation] CancellationToken token = default,
|
||||||
params Func<NetworkMessageHeader, Type?>[] converter)
|
params Func<NetworkMessageHeader, Type?>[] converter)
|
||||||
{
|
{
|
||||||
var writer = _interaction?.ReceiveChanel.Writer;
|
var writer = _interaction?.ReceiveChanel.Writer;
|
||||||
@@ -73,14 +74,13 @@ namespace mROA.Implementation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task PostCallMessageAsync<T>(Guid id, EMessageType eMessageType, T payload,
|
// public async Task PostCallMessageAsync<T>(Guid id, EMessageType eMessageType, T payload,
|
||||||
IEndPointContext? context) where T : notnull
|
// IEndPointContext? context) where T : notnull
|
||||||
{
|
// {
|
||||||
await PostCallMessageAsync(id, eMessageType, payload, context);
|
// await this.PostCallMessageAsync(id, eMessageType, payload, context);
|
||||||
}
|
// }
|
||||||
|
|
||||||
public async Task PostCallMessageAsync(Guid id, EMessageType eMessageType, object payload,
|
public async Task PostCallMessageAsync<T>(Guid id, EMessageType eMessageType, T payload, IEndPointContext? context) where T : notnull
|
||||||
IEndPointContext? context)
|
|
||||||
{
|
{
|
||||||
if (_interaction == null)
|
if (_interaction == null)
|
||||||
throw new NullReferenceException("Interaction toolkit is not initialized");
|
throw new NullReferenceException("Interaction toolkit is not initialized");
|
||||||
@@ -92,7 +92,8 @@ namespace mROA.Implementation
|
|||||||
{ Id = id, MessageType = eMessageType, Data = serialized });
|
{ Id = id, MessageType = eMessageType, Data = serialized });
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PostCallMessage<T>(Guid id, EMessageType eMessageType, T payload, IEndPointContext? context) where T : notnull
|
public void PostCallMessage<T>(Guid id, EMessageType eMessageType, T payload, IEndPointContext? context)
|
||||||
|
where T : notnull
|
||||||
{
|
{
|
||||||
PostCallMessageAsync(id, eMessageType, payload, context).GetAwaiter().GetResult();
|
PostCallMessageAsync(id, eMessageType, payload, context).GetAwaiter().GetResult();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ using mROA.Abstract;
|
|||||||
using mROA.Implementation.Attributes;
|
using mROA.Implementation.Attributes;
|
||||||
|
|
||||||
// ReSharper disable UnusedMember.Global
|
// ReSharper disable UnusedMember.Global
|
||||||
#pragma warning disable CS8618, CS9264
|
// #pragma warning disable CS8618, CS9264
|
||||||
|
|
||||||
namespace mROA.Implementation
|
namespace mROA.Implementation
|
||||||
{
|
{
|
||||||
@@ -30,8 +30,9 @@ namespace mROA.Implementation
|
|||||||
|
|
||||||
// ReSharper disable once UnusedMember.Global
|
// ReSharper disable once UnusedMember.Global
|
||||||
// ReSharper disable once MemberCanBePrivate.Global
|
// ReSharper disable once MemberCanBePrivate.Global
|
||||||
public SharedObjectShellShell(T value)
|
public SharedObjectShellShell(T value, IEndPointContext endPointContext)
|
||||||
{
|
{
|
||||||
|
EndPointContext = endPointContext;
|
||||||
Value = value;
|
Value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,15 +58,7 @@ namespace mROA.Implementation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[SerializationIgnore]
|
[SerializationIgnore] [JsonIgnore] public IEndPointContext EndPointContext { get; set; }
|
||||||
[JsonIgnore]
|
|
||||||
public IEndPointContext EndPointContext { get; set; } = new EndPointContext
|
|
||||||
{
|
|
||||||
RealRepository = TransmissionConfig.RealContextRepository,
|
|
||||||
RemoteRepository = TransmissionConfig.RemoteEndpointContextRepository,
|
|
||||||
HostId = TransmissionConfig.OwnershipRepository.GetHostOwnershipId(),
|
|
||||||
OwnerId = 0
|
|
||||||
};
|
|
||||||
|
|
||||||
public ComplexObjectIdentifier Identifier
|
public ComplexObjectIdentifier Identifier
|
||||||
{
|
{
|
||||||
@@ -96,7 +89,7 @@ namespace mROA.Implementation
|
|||||||
|
|
||||||
public static implicit operator T(SharedObjectShellShell<T> value) => value.Value;
|
public static implicit operator T(SharedObjectShellShell<T> value) => value.Value;
|
||||||
|
|
||||||
public static implicit operator SharedObjectShellShell<T>(T value) =>
|
// public static implicit operator SharedObjectShellShell<T>(T value) =>
|
||||||
new(value);
|
// new(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,27 +9,27 @@ namespace mROA.Implementation
|
|||||||
#if TRACE
|
#if TRACE
|
||||||
public static int TotalTransmittedBytes { get; set; }
|
public static int TotalTransmittedBytes { get; set; }
|
||||||
#endif
|
#endif
|
||||||
private static IContextRepository? _realContextRepository;
|
// private static IContextRepository? _realContextRepository;
|
||||||
private static IContextRepository? _remoteEndpointContextRepository;
|
// private static IContextRepository? _remoteEndpointContextRepository;
|
||||||
private static IOwnershipRepository? _ownershipRepository;
|
// private static IOwnershipRepository? _ownershipRepository;
|
||||||
|
//
|
||||||
public static IContextRepository RealContextRepository
|
// public static IContextRepository RealContextRepository
|
||||||
{
|
// {
|
||||||
get => _realContextRepository ?? throw new NullReferenceException("RealContextRepository is null");
|
// get => _realContextRepository ?? throw new NullReferenceException("RealContextRepository is null");
|
||||||
set => _realContextRepository = value;
|
// set => _realContextRepository = value;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public static IContextRepository RemoteEndpointContextRepository
|
// public static IContextRepository RemoteEndpointContextRepository
|
||||||
{
|
// {
|
||||||
get => _remoteEndpointContextRepository ??
|
// get => _remoteEndpointContextRepository ??
|
||||||
throw new NullReferenceException("RemoteEndpointContextRepository is null");
|
// throw new NullReferenceException("RemoteEndpointContextRepository is null");
|
||||||
set => _remoteEndpointContextRepository = value;
|
// set => _remoteEndpointContextRepository = value;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public static IOwnershipRepository OwnershipRepository
|
// public static IOwnershipRepository OwnershipRepository
|
||||||
{
|
// {
|
||||||
get => _ownershipRepository ?? throw new NullReferenceException("OwnershipRepository is null");
|
// get => _ownershipRepository ?? throw new NullReferenceException("OwnershipRepository is null");
|
||||||
set => _ownershipRepository = value;
|
// set => _ownershipRepository = value;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user