diff --git a/mROA/Implementation/Backend/BasicExecutionModule.cs b/mROA/Implementation/Backend/BasicExecutionModule.cs index 1ee01c8..56ec2ea 100644 --- a/mROA/Implementation/Backend/BasicExecutionModule.cs +++ b/mROA/Implementation/Backend/BasicExecutionModule.cs @@ -88,10 +88,11 @@ namespace mROA.Implementation.Backend { try { - var finalResult = currentCommand.Invoke(context, parameter is null + var finalParameter = parameter is null ? Array.Empty() : new[] - { parameter }); + { parameter }; + var finalResult = currentCommand.Invoke(context, finalParameter); return new TypedFinalCommandExecution { @@ -120,10 +121,11 @@ namespace mROA.Implementation.Backend token.Register(() => Console.WriteLine($"Cancellation requested check {command.Id}")); try { - var result = (Task)currentCommand.Invoke(context, parameter is null + var finalParameter = parameter is null ? new object[] { token } : new[] - { parameter, token })!; + { parameter, token }; + var result = (Task)currentCommand.Invoke(context, finalParameter)!; result.ContinueWith(_ => @@ -140,6 +142,7 @@ namespace mROA.Implementation.Backend var multiClientOwnershipRepository = TransmissionConfig.OwnershipRepository as MultiClientOwnershipRepository; + multiClientOwnershipRepository?.RegisterOwnership(representationModule.Id); representationModule.PostCallMessage(command.Id, MessageType.FinishedCommandExecution, payload); multiClientOwnershipRepository?.FreeOwnership(); @@ -170,11 +173,12 @@ namespace mROA.Implementation.Backend var token = tokenSource.Token; try { + var finalParameter = parameter is null + ? new object[] { token } + : new[] + { parameter, token }; var result = - (Task)currentCommand.Invoke(context, parameter is null - ? new object[] { token } - : new[] - { parameter, token })!; + (Task)currentCommand.Invoke(context, finalParameter)!; result.ContinueWith(t => { diff --git a/mROA/Implementation/Backend/ContextRepository.cs b/mROA/Implementation/Backend/ContextRepository.cs index b771a3d..109c02a 100644 --- a/mROA/Implementation/Backend/ContextRepository.cs +++ b/mROA/Implementation/Backend/ContextRepository.cs @@ -76,7 +76,7 @@ namespace mROA.Implementation.Backend public object GetSingleObject(Type type) { - return _singletons!.GetValueOrDefault(type.GetHashCode()) ?? throw new ArgumentException("Unregistered singleton type"); + return _singletons.GetValueOrDefault(type.GetHashCode()) ?? throw new ArgumentException("Unregistered singleton type"); } public int GetObjectIndex(object o) diff --git a/mROA/Implementation/Backend/MultiClientContextRepository.cs b/mROA/Implementation/Backend/MultiClientContextRepository.cs index 4d76987..d997ad2 100644 --- a/mROA/Implementation/Backend/MultiClientContextRepository.cs +++ b/mROA/Implementation/Backend/MultiClientContextRepository.cs @@ -29,42 +29,50 @@ namespace mROA.Implementation.Backend public int ResisterObject(object o) { - return GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()).ResisterObject(o); + var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()); + return repository.ResisterObject(o); } public void ClearObject(int id) { - GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()).ClearObject(id); + var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()); + repository.ClearObject(id); } public T GetObjectBySharedObject(SharedObject sharedObject) { - return GetRepository(sharedObject.OwnerId).GetObject(sharedObject.ContextId); + var repository = GetRepository(sharedObject.OwnerId); + return repository.GetObject(sharedObject.ContextId); } public object GetObject(int id) { - return GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()).GetObject(id); + var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()); + return repository.GetObject(id); } public T? GetObject(int id) { - return GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()).GetObject(id); + var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()); + return repository.GetObject(id); } public object GetSingleObject(Type type) { - return GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()).GetSingleObject(type); + var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()); + return repository.GetSingleObject(type); } public int GetObjectIndex(object o) { - return GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()).GetObjectIndex(o); + var repository = GetRepositoryByClientId(TransmissionConfig.OwnershipRepository.GetOwnershipId()); + return repository.GetObjectIndex(o); } public IContextRepository GetRepository(int clientId) { - return GetRepositoryByClientId(clientId); + var repository = GetRepositoryByClientId(clientId); + return repository; } } } \ No newline at end of file diff --git a/mROA/Implementation/CreativeRepresentationModuleProducer.cs b/mROA/Implementation/CreativeRepresentationModuleProducer.cs index 667c2f4..5ac35cc 100644 --- a/mROA/Implementation/CreativeRepresentationModuleProducer.cs +++ b/mROA/Implementation/CreativeRepresentationModuleProducer.cs @@ -33,8 +33,9 @@ namespace mROA.Implementation foreach (var creationModule in _creationModules) produced.Inject(creationModule); - - produced.Inject(_hub.GetInteracion(id)); + + var interaction = _hub.GetInteracion(id); + produced.Inject(interaction); return produced; } diff --git a/mROA/Implementation/Frontend/NetworkFrontendBridge.cs b/mROA/Implementation/Frontend/NetworkFrontendBridge.cs index 53da9fc..5616e5b 100644 --- a/mROA/Implementation/Frontend/NetworkFrontendBridge.cs +++ b/mROA/Implementation/Frontend/NetworkFrontendBridge.cs @@ -45,7 +45,9 @@ namespace mROA.Implementation.Frontend throw new Exception($"Incorrect message type. Must be IdAssigning, current : {welcomeMessage.SchemaId.ToString()}"); } - TransmissionConfig.OwnershipRepository = new StaticOwnershipRepository(_serialization.Deserialize(welcomeMessage.Data)!.Id); + + var assignment = _serialization.Deserialize(welcomeMessage.Data)!; + TransmissionConfig.OwnershipRepository = new StaticOwnershipRepository(assignment.Id); } } } \ No newline at end of file diff --git a/mROA/Implementation/Frontend/RequestExtractor.cs b/mROA/Implementation/Frontend/RequestExtractor.cs index 83bc460..87741e8 100644 --- a/mROA/Implementation/Frontend/RequestExtractor.cs +++ b/mROA/Implementation/Frontend/RequestExtractor.cs @@ -91,7 +91,8 @@ namespace mROA.Implementation.Frontend if (request.Parameter is not null) { - var parameterType = _methodRepository!.GetMethod(request.CommandId).GetParameters().First() + var method = _methodRepository!.GetMethod(request.CommandId); + var parameterType = method.GetParameters().First() .ParameterType; request.Parameter = _serializationToolkit.Cast(request.Parameter, parameterType); diff --git a/mROA/Implementation/NextGenerationInteractionModule.cs b/mROA/Implementation/NextGenerationInteractionModule.cs index cbe6731..f31664c 100644 --- a/mROA/Implementation/NextGenerationInteractionModule.cs +++ b/mROA/Implementation/NextGenerationInteractionModule.cs @@ -51,7 +51,8 @@ namespace mROA.Implementation var rawMessage = _serialization.Serialize(message); - await BaseStream.WriteAsync(BitConverter.GetBytes((ushort)rawMessage.Length).AsMemory(0, sizeof(ushort))); + var header = BitConverter.GetBytes((ushort)rawMessage.Length).AsMemory(0, sizeof(ushort)); + await BaseStream.WriteAsync(header); await BaseStream.WriteAsync(rawMessage); } diff --git a/mROA/Implementation/RemoteContextRepository.cs b/mROA/Implementation/RemoteContextRepository.cs index 70cd543..9fb7191 100644 --- a/mROA/Implementation/RemoteContextRepository.cs +++ b/mROA/Implementation/RemoteContextRepository.cs @@ -25,8 +25,9 @@ namespace mROA.Implementation throw new NullReferenceException("representation producer is not initialized"); if (!RemoteTypes.TryGetValue(typeof(T), out var remoteType)) throw new NotSupportedException(); + var representationModule = _representationProducer.Produce(sharedObject.OwnerId); var remote = (T)Activator.CreateInstance(remoteType, sharedObject.ContextId, - _representationProducer.Produce(sharedObject.OwnerId))!; + representationModule)!; return remote; } @@ -41,8 +42,9 @@ namespace mROA.Implementation throw new NullReferenceException("representation producer is not initialized"); if (!RemoteTypes.TryGetValue(typeof(T), out var remoteType)) throw new NotSupportedException(); + var representationModule = _representationProducer.Produce(TransmissionConfig.OwnershipRepository.GetOwnershipId()); var remote = (T)Activator.CreateInstance(remoteType, id, - _representationProducer.Produce(TransmissionConfig.OwnershipRepository.GetOwnershipId()))!; + representationModule)!; return remote; } @@ -51,8 +53,9 @@ namespace mROA.Implementation if (_representationProducer == null) throw new NullReferenceException("representation producer is not initialized"); + var representationModule = _representationProducer.Produce(TransmissionConfig.OwnershipRepository.GetOwnershipId()); return Activator.CreateInstance(RemoteTypes[type], -1, - _representationProducer.Produce(TransmissionConfig.OwnershipRepository.GetOwnershipId()))!; + representationModule)!; } public int GetObjectIndex(object o) diff --git a/mROA/Implementation/RemoteObjectBase.cs b/mROA/Implementation/RemoteObjectBase.cs index 00f89c4..0c993f1 100644 --- a/mROA/Implementation/RemoteObjectBase.cs +++ b/mROA/Implementation/RemoteObjectBase.cs @@ -27,6 +27,7 @@ namespace mROA.Implementation { var request = new DefaultCallRequest { CommandId = methodId, ObjectId = _id, Parameter = parameter, ParameterType = parameter?.GetType() }; + await _representationModule.PostCallMessageAsync(request.Id, MessageType.CallRequest, request); var localTokenSource = new CancellationTokenSource(); diff --git a/mROA/Implementation/RepresentationModule.cs b/mROA/Implementation/RepresentationModule.cs index 54c9c76..67c26ce 100644 --- a/mROA/Implementation/RepresentationModule.cs +++ b/mROA/Implementation/RepresentationModule.cs @@ -29,16 +29,18 @@ namespace mROA.Implementation { if (_serialization == null) throw new NullReferenceException("Serialization toolkit is not initialized"); - - return _serialization.Deserialize(await GetRawMessage(requestId, messageType, token))!; + + var rawMessage = await GetRawMessage(requestId, messageType, token); + return _serialization.Deserialize(rawMessage)!; } public T GetMessage(Guid? requestId = null, MessageType? messageType = null) { if (_serialization == null) throw new NullReferenceException("Serialization toolkit is not initialized"); - - return _serialization.Deserialize(GetRawMessage(requestId, messageType).GetAwaiter().GetResult())!; + + var rawMessage = GetRawMessage(requestId, messageType).GetAwaiter().GetResult(); + return _serialization.Deserialize(rawMessage)!; } public async Task GetRawMessage(Guid? requestId = null, MessageType? messageType = null, CancellationToken token = default) @@ -82,9 +84,10 @@ namespace mROA.Implementation throw new NullReferenceException("Serialization toolkit is not initialized"); Console.WriteLine($"Posting message: {id} - {messageType}"); - + + var serialized = _serialization.Serialize(payload, payloadType); await _interaction.PostMessage(new NetworkMessage - { Id = id, SchemaId = messageType, Data = _serialization.Serialize(payload, payloadType) }); + { Id = id, SchemaId = messageType, Data = serialized }); } public void PostCallMessage(Guid id, MessageType messageType, T payload) where T : notnull diff --git a/mROA/Implementation/SharedObject.cs b/mROA/Implementation/SharedObject.cs index 8dcfcf9..a9e56dc 100644 --- a/mROA/Implementation/SharedObject.cs +++ b/mROA/Implementation/SharedObject.cs @@ -73,7 +73,7 @@ namespace mROA.Implementation set { _contextId = value; - Value = GetDefaultContextRepository().GetObjectBySharedObject(this)!; + Value = GetDefaultContextRepository().GetObjectBySharedObject(this); } }