From 9128f3f6ee0d3c89e7e0538ac244a133c746e4df Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofanov Date: Tue, 14 Jan 2025 13:59:10 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B2=D1=8F=D0=B7=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mROA.Test/ITestController.cs | 48 +++++++++++++++++-- mROA.Test/UnitTest1.cs | 43 ++++++++++++++--- .../Implementation/JsonSerialisationModule.cs | 10 +++- .../Implementation/TransmittedSharedObject.cs | 4 +- 4 files changed, 92 insertions(+), 13 deletions(-) diff --git a/mROA.Test/ITestController.cs b/mROA.Test/ITestController.cs index c2c2722..5f02545 100644 --- a/mROA.Test/ITestController.cs +++ b/mROA.Test/ITestController.cs @@ -9,8 +9,9 @@ public interface ITestController Task AAsync(CancellationToken cancellationToken); int B(); Task BAsync(CancellationToken cancellationToken); - TransmittedSharedObject SharedObjectTransmitionTest(); + int Parametrized(TestParameter parameter); + TransmittedSharedObject GetTestParameter(); } [SharedObjectSingleton] @@ -41,11 +42,32 @@ public class TestController : ITestController public TransmittedSharedObject SharedObjectTransmitionTest() { - return new TransmittionTestController { ReturnIfNotNull = ReturnIfNotNull ?? new TestController() }; + return new TransmissionTestController { ReturnIfNotNull = ReturnIfNotNull ?? new TestController() }; + } + + public int Parametrized(TestParameter parameter) + { + return parameter.A + parameter.LinkedObject.Value.Test; + } + + public TransmittedSharedObject GetTestParameter() + { + return new TestParameterInstance(); } } -public class TransmittionTestController : ITestController +[SharedObjectInterafce] +public interface ITestParameter +{ + public int Test { get; } +} + +public class TestParameterInstance : ITestParameter +{ + public int Test => 10; +} + +public class TransmissionTestController : ITestController { public ITestController ReturnIfNotNull; @@ -72,6 +94,26 @@ public class TransmittionTestController : ITestController public TransmittedSharedObject SharedObjectTransmitionTest() { + TransmittedSharedObject x = new TestController(); + + + return new TestController { ReturnIfNotNull = this }; } + + public int Parametrized(TestParameter parameter) + { + return parameter.A * parameter.LinkedObject.Value.Test; + } + + public TransmittedSharedObject GetTestParameter() + { + return new TestParameterInstance(); + } +} + +public class TestParameter +{ + public int A { get; set; } + public TransmittedSharedObject LinkedObject { get; set; } } \ No newline at end of file diff --git a/mROA.Test/UnitTest1.cs b/mROA.Test/UnitTest1.cs index 2360e94..a707535 100644 --- a/mROA.Test/UnitTest1.cs +++ b/mROA.Test/UnitTest1.cs @@ -21,13 +21,13 @@ public class Tests public void Setup() { _interactionModule = new ProgramlyInteractionChanel(); - _serialisationModule = new JsonSerialisationModule(_interactionModule); var repo = new MethodRepository(); repo.CollectForAssembly(Assembly.GetExecutingAssembly()); _methodRepository = repo; var repo2 = new ContextRepository(); repo2.FillSingletons(Assembly.GetExecutingAssembly()); _contextRepository = repo2; + _serialisationModule = new JsonSerialisationModule(_interactionModule, _methodRepository); _executeModule = new PrepairedExecutionModule(_methodRepository, _serialisationModule, _contextRepository); TransmissionConfig.DefaultContextRepository = _contextRepository; @@ -67,7 +67,7 @@ public class Tests { var repo = new MethodRepository(); repo.CollectForAssembly(Assembly.GetExecutingAssembly()); - Assert.That(repo.GetMethods().ToList().Count == 5); + Assert.That(repo.GetMethods().ToList().Count == 8); } [Test] @@ -99,7 +99,7 @@ public class Tests var firstFull = JsonDocument.Parse(_interactionModule.OutputBuffer.Last()).RootElement.GetProperty("Result") .GetInt32(); - + _interactionModule.PassCommand(132, JsonSerializer.Serialize(new JsonCallRequest { CommandId = 4, ObjectId = response.ContextId })); @@ -108,16 +108,45 @@ public class Tests JsonSerializer.Deserialize(_interactionModule.OutputBuffer.Last()) ?.Result.ToString() ); - + _interactionModule.PassCommand(132, JsonSerializer.Serialize(new JsonCallRequest { CommandId = 2, ObjectId = response.ContextId })); _interactionModule.PassCommand(132, JsonSerializer.Serialize(new JsonCallRequest { CommandId = 2, ObjectId = response.ContextId })); - + var secondFull = JsonDocument.Parse(_interactionModule.OutputBuffer.Last()).RootElement.GetProperty("Result") .GetInt32(); - - Assert.That(firstFull == 456789 && secondFull == 6); + Assert.That(firstFull == 456789 && secondFull == 6); + } + + [Test] + public void LinkedObjectsAndParametersTest() + { + _interactionModule.PassCommand(132, """ + { + "CommandId": 6 + } + """); + var response = + JsonSerializer.Deserialize>( + JsonSerializer.Deserialize(_interactionModule.OutputBuffer.Last()) + ?.Result.ToString() + ); + var x = response.ContextId; + _interactionModule.PassCommand(132, + JsonSerializer.Serialize(new JsonCallRequest + { + CommandId = 5, + Parameter = new TestParameter + { + A = 10, + LinkedObject = new TransmittedSharedObject { ContextId = x } + } + })); + + var finalResponse = JsonDocument.Parse(_interactionModule.OutputBuffer.Last()).RootElement.GetProperty("Result").GetInt32(); + + Assert.That(finalResponse, Is.EqualTo(20)); } } \ No newline at end of file diff --git a/mROA/Implementation/JsonSerialisationModule.cs b/mROA/Implementation/JsonSerialisationModule.cs index 08104b9..20c9907 100644 --- a/mROA/Implementation/JsonSerialisationModule.cs +++ b/mROA/Implementation/JsonSerialisationModule.cs @@ -8,9 +8,11 @@ public class JsonSerialisationModule : ISerialisationModule { private readonly IInteractionModule _dataSource; private IExecuteModule _executeModule; - public JsonSerialisationModule(IInteractionModule dataSource) + private IMethodRepository _methodRepository; + public JsonSerialisationModule(IInteractionModule dataSource, IMethodRepository methodRepository) { _dataSource = dataSource; + _methodRepository = methodRepository; _dataSource.SetMessageHandler(HandleIncomingRequest); } @@ -20,6 +22,12 @@ public class JsonSerialisationModule : ISerialisationModule { JsonCallRequest request = JsonSerializer.Deserialize(command); request.ClientId = clientId; + + if (request.Parameter is not null) + { + var parameter = _methodRepository.GetMethod(request.CommandId).GetParameters().First().ParameterType; + request.Parameter = (( JsonElement)request.Parameter).Deserialize(parameter); + } var response = _executeModule.Execute(request); PostResponse(response); diff --git a/mROA/Implementation/TransmittedSharedObject.cs b/mROA/Implementation/TransmittedSharedObject.cs index 353f1c6..35a8c10 100644 --- a/mROA/Implementation/TransmittedSharedObject.cs +++ b/mROA/Implementation/TransmittedSharedObject.cs @@ -12,7 +12,7 @@ public class TransmittedSharedObject public int ContextId { get; set; } = -1; [JsonIgnore] - public T Value { get; set; } + public T Value => (T)TransmissionConfig.DefaultContextRepository.GetObject(ContextId); [JsonIgnore] public IContextRepository Context { get; set; } @@ -20,7 +20,7 @@ public class TransmittedSharedObject public static implicit operator T(TransmittedSharedObject value) => value.Value; public static implicit operator TransmittedSharedObject(T value) => - new() { Value = value, ContextId = TransmissionConfig.DefaultContextRepository.GetObjectIndex(value) }; + new() { ContextId = TransmissionConfig.DefaultContextRepository.GetObjectIndex(value) }; // public void Fill() => Value = (T)TransmissionConfig.DefaultContextRepository.GetObject(ContextId); // public void Collect() => ContextId = TransmissionConfig.DefaultContextRepository.GetObjectIndex(ContextId);