using System.Text.Json; using mROA.Implementation; namespace mROA.Test; [SharedObjectInterafce] public interface ITestController { void A(); Task AAsync(CancellationToken cancellationToken); int B(); Task BAsync(CancellationToken cancellationToken); TransmittedSharedObject SharedObjectTransmitionTest(); int Parametrized(TestParameter parameter); TransmittedSharedObject GetTestParameter(); } [SharedObjectSingleton] public class TestController : ITestController { public ITestController? ReturnIfNotNull; private int _bOut = 5; public void A() { Console.WriteLine("A called"); } public Task AAsync(CancellationToken cancellationToken) { return Task.CompletedTask; } public int B() { return _bOut++; } public Task BAsync(CancellationToken cancellationToken) { return Task.FromResult(5); } public TransmittedSharedObject SharedObjectTransmitionTest() { 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(); } } [SharedObjectInterafce] public interface ITestParameter { public int Test(); } public class TestParameterInstance : ITestParameter { public int Test() => 10; } public class TransmissionTestController : ITestController { public ITestController ReturnIfNotNull; public void A() { Console.WriteLine("A called alternative"); } public Task AAsync(CancellationToken cancellationToken) { Thread.Sleep(500); return Task.CompletedTask; } public int B() { return 456789; } public Task BAsync(CancellationToken cancellationToken) { return Task.FromResult(465789); } 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; } } public class TestControllerRemoteEndpoint(int id, ISerialisationModule.IFrontendSerialisationModule serialisationModule) : ITestController, IRemoteObject { public void A() { serialisationModule.PostCallRequest(new JsonCallRequest { CommandId = 0, ObjectId = id }); } 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() { TransmissionConfig.SetupBackendRepository(); var request = new JsonCallRequest { CommandId = 2, ObjectId = id }; serialisationModule.PostCallRequest(request); var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) .GetAwaiter().GetResult(); TransmissionConfig.SetupFrontendRepository(); var convertation = response.Result! is JsonElement e ? e.Deserialize() : (int)response.Result!; return convertation; } public async Task BAsync(CancellationToken cancellationToken) { TransmissionConfig.SetupBackendRepository(); var request = new JsonCallRequest { CommandId = 3, ObjectId = id }; serialisationModule.PostCallRequest(request); var response = await serialisationModule.GetNextCommandExecution(request.CallRequestId); TransmissionConfig.SetupFrontendRepository(); var convertation = response.Result! is JsonElement e ? e.Deserialize() : (int)response.Result!; return convertation; } public TransmittedSharedObject SharedObjectTransmitionTest() { TransmissionConfig.SetupBackendRepository(); var request = new JsonCallRequest { CommandId = 4, ObjectId = id }; serialisationModule.PostCallRequest(request); var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) .GetAwaiter().GetResult(); TransmissionConfig.SetupFrontendRepository(); var convertation = response.Result! is JsonElement e ? e.Deserialize>()! : (TransmittedSharedObject)response.Result!; return convertation; } public int Parametrized(TestParameter parameter) { var request = new JsonCallRequest { CommandId = 5, ObjectId = id, Parameter = parameter }; TransmissionConfig.SetupBackendRepository(); serialisationModule.PostCallRequest(request); var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) .GetAwaiter().GetResult(); TransmissionConfig.SetupFrontendRepository(); var convertation = response.Result! is JsonElement e ? e.Deserialize() : (int)response.Result!; return convertation; } public TransmittedSharedObject GetTestParameter() { TransmissionConfig.SetupBackendRepository(); var request = new JsonCallRequest { CommandId = 6, ObjectId = id }; serialisationModule.PostCallRequest(request); var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) .GetAwaiter().GetResult(); TransmissionConfig.SetupFrontendRepository(); var convertation = response.Result! is JsonElement e ? e.Deserialize>() : (TransmittedSharedObject)response.Result!; return convertation; } public int Id => id; } public class TestParameterRemoteEndpoint(int id, ISerialisationModule.IFrontendSerialisationModule serialisationModule) : ITestParameter, IRemoteObject{ public int Test() { var request = new JsonCallRequest { CommandId = 7, ObjectId = id }; serialisationModule.PostCallRequest(request); var response = serialisationModule.GetNextCommandExecution(request.CallRequestId) .GetAwaiter().GetResult(); TransmissionConfig.SetupFrontendRepository(); var convertation = response.Result! is JsonElement e ? e.Deserialize() : (int)response.Result!; TransmissionConfig.SetupBackendRepository(); return convertation; } public int Id => id; }