From b2f16b27f4e6fd070591d5ff70417159189cab75 Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofanov Date: Mon, 3 Feb 2025 10:42:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B0=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mROA.Test/ITestController.cs | 54 ++++++++++++------- mROA.Test/StreamTest.cs | 2 +- mROA/Abstract/IInteractionModule.cs | 2 +- mROA/Abstract/ISerialisationModule.cs | 2 +- .../FrontendContextRepository.cs | 6 +-- mROA/Implementation/IRemoteObject.cs | 2 +- .../JsonFrontendSerialisationModule.cs | 6 +-- .../StreamBasedFrontendInteractionModule.cs | 6 +-- .../Implementation/TransmittedSharedObject.cs | 1 + 9 files changed, 49 insertions(+), 32 deletions(-) diff --git a/mROA.Test/ITestController.cs b/mROA.Test/ITestController.cs index c4f1f47..5d407f0 100644 --- a/mROA.Test/ITestController.cs +++ b/mROA.Test/ITestController.cs @@ -95,9 +95,8 @@ public class TransmissionTestController : ITestController public TransmittedSharedObject SharedObjectTransmitionTest() { TransmittedSharedObject x = new TestController(); - - - + + return new TestController { ReturnIfNotNull = this }; } @@ -118,47 +117,64 @@ public class TestParameter public TransmittedSharedObject LinkedObject { get; set; } } -public class TestControllerRemoteEndoint : ITestController, IRemoteObject +public class TestControllerRemoteEndoint(int id, ISerialisationModule.IFrontendSerialisationModule serialisationModule) + : ITestController, IRemoteObject { - public TestControllerRemoteEndoint(int id) - { - _id = id; - } public void A() { - + serialisationModule.PostCallRequest(new JsonCallRequest { CommandId = 0, ObjectId = id }); } - public Task AAsync(CancellationToken cancellationToken) + public async Task AAsync(CancellationToken cancellationToken) { - + var request = new JsonCallRequest { CommandId = 1, ObjectId = id }; + serialisationModule.PostCallRequest(request); + await serialisationModule.GetNextCommandExecution(request.CallRequestId); } public int B() { - + var request = new JsonCallRequest { CommandId = 2, ObjectId = id }; + serialisationModule.PostCallRequest(request); + var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) + .GetAwaiter().GetResult(); + return (int)response.Result!; } - public Task BAsync(CancellationToken cancellationToken) + public async Task BAsync(CancellationToken cancellationToken) { - + var request = new JsonCallRequest { CommandId = 3, ObjectId = id }; + serialisationModule.PostCallRequest(request); + var response = await serialisationModule.GetNextCommandExecution(request.CallRequestId); + return (int)response.Result!; } public TransmittedSharedObject SharedObjectTransmitionTest() { - + var request = new JsonCallRequest { CommandId = 4, ObjectId = id }; + serialisationModule.PostCallRequest(request); + var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) + .GetAwaiter().GetResult(); + return (TransmittedSharedObject)response.Result!; } public int Parametrized(TestParameter parameter) { - + var request = new JsonCallRequest { CommandId = 5, ObjectId = id, Parameter = parameter }; + serialisationModule.PostCallRequest(request); + var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) + .GetAwaiter().GetResult(); + return (int)response.Result!; } public TransmittedSharedObject GetTestParameter() { - + var request = new JsonCallRequest { CommandId = 6, ObjectId = id }; + serialisationModule.PostCallRequest(request); + var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) + .GetAwaiter().GetResult(); + return (TransmittedSharedObject)response.Result!; } - private int _id; - public int Id => _id; + public int Id => id; } \ No newline at end of file diff --git a/mROA.Test/StreamTest.cs b/mROA.Test/StreamTest.cs index d723677..2dbce88 100644 --- a/mROA.Test/StreamTest.cs +++ b/mROA.Test/StreamTest.cs @@ -52,7 +52,7 @@ public class StreamTest var req = new JsonCallRequest { CommandId = 1, ObjectId = -1 }; _frontendSerialisationModule.PostCallRequest(req); - var res = ((JsonElement)_frontendSerialisationModule.GetNextCommandExecution(req.CallRequestId).Result).Deserialize(); + var res = ((JsonElement)_frontendSerialisationModule.GetNextCommandExecution(req.CallRequestId).GetAwaiter().GetResult().Result!).Deserialize(); isTestNotFinished = false; Assert.That(res.A == "wqer" && res.B == 5); } diff --git a/mROA/Abstract/IInteractionModule.cs b/mROA/Abstract/IInteractionModule.cs index ef4d0d6..2b33477 100644 --- a/mROA/Abstract/IInteractionModule.cs +++ b/mROA/Abstract/IInteractionModule.cs @@ -6,7 +6,7 @@ public interface IInteractionModule void SendTo(int clientId, byte[] message); public interface IFrontendInteractionModule { - public byte[] ReceiveMessage(); + public Task ReceiveMessage(); public void PostMessage(byte[] message); } } \ No newline at end of file diff --git a/mROA/Abstract/ISerialisationModule.cs b/mROA/Abstract/ISerialisationModule.cs index 56fbc77..b40ed61 100644 --- a/mROA/Abstract/ISerialisationModule.cs +++ b/mROA/Abstract/ISerialisationModule.cs @@ -9,7 +9,7 @@ public interface ISerialisationModule void SetExecuteModule(IExecuteModule executeModule); public interface IFrontendSerialisationModule { - T GetNextCommandExecution(Guid requestId) where T : ICommandExecution; + Task GetNextCommandExecution(Guid requestId) where T : ICommandExecution; void PostCallRequest(ICallRequest callRequest); } } \ No newline at end of file diff --git a/mROA/Implementation/FrontendContextRepository.cs b/mROA/Implementation/FrontendContextRepository.cs index 4a90c58..2b9ef9b 100644 --- a/mROA/Implementation/FrontendContextRepository.cs +++ b/mROA/Implementation/FrontendContextRepository.cs @@ -2,10 +2,10 @@ namespace mROA.Implementation; -public class FrontendContextRepository(Dictionary remoteTypes) : IContextRepository +public class FrontendContextRepository(Dictionary remoteTypes, ISerialisationModule serialisationModule) : IContextRepository { private FrozenDictionary _remoteTypes = remoteTypes.ToFrozenDictionary(); - + public int ResisterObject(object o) { throw new NotSupportedException(); @@ -25,7 +25,7 @@ public class FrontendContextRepository(Dictionary remoteTypes) : ICo { if (_remoteTypes.TryGetValue(typeof(T), out var remoteType)) { - var remote = (T)Activator.CreateInstance(remoteType, id)!; + var remote = (T)Activator.CreateInstance(remoteType, id, serialisationModule)!; return remote; } throw new NotSupportedException(); diff --git a/mROA/Implementation/IRemoteObject.cs b/mROA/Implementation/IRemoteObject.cs index 435c23a..36a2fa6 100644 --- a/mROA/Implementation/IRemoteObject.cs +++ b/mROA/Implementation/IRemoteObject.cs @@ -2,5 +2,5 @@ public interface IRemoteObject { - internal int Id { get; } + public int Id { get; } } \ No newline at end of file diff --git a/mROA/Implementation/JsonFrontendSerialisationModule.cs b/mROA/Implementation/JsonFrontendSerialisationModule.cs index 7b835eb..a5ffec9 100644 --- a/mROA/Implementation/JsonFrontendSerialisationModule.cs +++ b/mROA/Implementation/JsonFrontendSerialisationModule.cs @@ -6,13 +6,13 @@ namespace mROA.Implementation; public class JsonFrontendSerialisationModule(IInteractionModule.IFrontendInteractionModule interactionModule) : ISerialisationModule.IFrontendSerialisationModule { - public T GetNextCommandExecution(Guid requestId) where T : ICommandExecution + public async Task GetNextCommandExecution(Guid requestId) where T : ICommandExecution { - var receiveMessage = interactionModule.ReceiveMessage(); + var receiveMessage = await interactionModule.ReceiveMessage(); var parsed = JsonSerializer.Deserialize(receiveMessage); while (parsed.CallRequestId != requestId) { - receiveMessage = interactionModule.ReceiveMessage(); + receiveMessage = await interactionModule.ReceiveMessage(); parsed = JsonSerializer.Deserialize(receiveMessage); } return parsed; diff --git a/mROA/Implementation/StreamBasedFrontendInteractionModule.cs b/mROA/Implementation/StreamBasedFrontendInteractionModule.cs index 6e9dd91..9fd31a4 100644 --- a/mROA/Implementation/StreamBasedFrontendInteractionModule.cs +++ b/mROA/Implementation/StreamBasedFrontendInteractionModule.cs @@ -4,16 +4,16 @@ public class StreamBasedFrontendInteractionModule : IInteractionModule.IFrontend { public Stream ServerStream { get; set; } - public byte[] ReceiveMessage() + public async Task ReceiveMessage() { const int bufferSize = ushort.MaxValue; byte[] buffer = new byte[bufferSize]; if (!ServerStream.CanRead) throw new IOException("Server is not connected."); - ServerStream.ReadExactly(buffer, 0, 2); + await ServerStream.ReadExactlyAsync(buffer, 0, 2); var len = BitConverter.ToUInt16(buffer, 0); - ServerStream.ReadExactly(buffer, 0, len); + await ServerStream.ReadExactlyAsync(buffer, 0, len); return buffer[..len]; } diff --git a/mROA/Implementation/TransmittedSharedObject.cs b/mROA/Implementation/TransmittedSharedObject.cs index ceac482..d3a9a30 100644 --- a/mROA/Implementation/TransmittedSharedObject.cs +++ b/mROA/Implementation/TransmittedSharedObject.cs @@ -21,4 +21,5 @@ public class TransmittedSharedObject public static implicit operator TransmittedSharedObject(T value) => new() { ContextId = TransmissionConfig.DefaultContextRepository.GetObjectIndex(value) }; + } \ No newline at end of file