связанная передача параметров работает

This commit is contained in:
2025-01-14 13:59:10 +03:00
parent 7cbdd57569
commit 9128f3f6ee
4 changed files with 92 additions and 13 deletions
+45 -3
View File
@@ -9,8 +9,9 @@ public interface ITestController
Task AAsync(CancellationToken cancellationToken); Task AAsync(CancellationToken cancellationToken);
int B(); int B();
Task<int> BAsync(CancellationToken cancellationToken); Task<int> BAsync(CancellationToken cancellationToken);
TransmittedSharedObject<ITestController> SharedObjectTransmitionTest(); TransmittedSharedObject<ITestController> SharedObjectTransmitionTest();
int Parametrized(TestParameter parameter);
TransmittedSharedObject<ITestParameter> GetTestParameter();
} }
[SharedObjectSingleton] [SharedObjectSingleton]
@@ -41,11 +42,32 @@ public class TestController : ITestController
public TransmittedSharedObject<ITestController> SharedObjectTransmitionTest() public TransmittedSharedObject<ITestController> 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<ITestParameter> 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; public ITestController ReturnIfNotNull;
@@ -72,6 +94,26 @@ public class TransmittionTestController : ITestController
public TransmittedSharedObject<ITestController> SharedObjectTransmitionTest() public TransmittedSharedObject<ITestController> SharedObjectTransmitionTest()
{ {
TransmittedSharedObject<ITestController> x = new TestController();
return new TestController { ReturnIfNotNull = this }; return new TestController { ReturnIfNotNull = this };
} }
public int Parametrized(TestParameter parameter)
{
return parameter.A * parameter.LinkedObject.Value.Test;
}
public TransmittedSharedObject<ITestParameter> GetTestParameter()
{
return new TestParameterInstance();
}
}
public class TestParameter
{
public int A { get; set; }
public TransmittedSharedObject<ITestParameter> LinkedObject { get; set; }
} }
+36 -7
View File
@@ -21,13 +21,13 @@ public class Tests
public void Setup() public void Setup()
{ {
_interactionModule = new ProgramlyInteractionChanel(); _interactionModule = new ProgramlyInteractionChanel();
_serialisationModule = new JsonSerialisationModule(_interactionModule);
var repo = new MethodRepository(); var repo = new MethodRepository();
repo.CollectForAssembly(Assembly.GetExecutingAssembly()); repo.CollectForAssembly(Assembly.GetExecutingAssembly());
_methodRepository = repo; _methodRepository = repo;
var repo2 = new ContextRepository(); var repo2 = new ContextRepository();
repo2.FillSingletons(Assembly.GetExecutingAssembly()); repo2.FillSingletons(Assembly.GetExecutingAssembly());
_contextRepository = repo2; _contextRepository = repo2;
_serialisationModule = new JsonSerialisationModule(_interactionModule, _methodRepository);
_executeModule = new PrepairedExecutionModule(_methodRepository, _serialisationModule, _contextRepository); _executeModule = new PrepairedExecutionModule(_methodRepository, _serialisationModule, _contextRepository);
TransmissionConfig.DefaultContextRepository = _contextRepository; TransmissionConfig.DefaultContextRepository = _contextRepository;
@@ -67,7 +67,7 @@ public class Tests
{ {
var repo = new MethodRepository(); var repo = new MethodRepository();
repo.CollectForAssembly(Assembly.GetExecutingAssembly()); repo.CollectForAssembly(Assembly.GetExecutingAssembly());
Assert.That(repo.GetMethods().ToList().Count == 5); Assert.That(repo.GetMethods().ToList().Count == 8);
} }
[Test] [Test]
@@ -99,7 +99,7 @@ public class Tests
var firstFull = JsonDocument.Parse(_interactionModule.OutputBuffer.Last()).RootElement.GetProperty("Result") var firstFull = JsonDocument.Parse(_interactionModule.OutputBuffer.Last()).RootElement.GetProperty("Result")
.GetInt32(); .GetInt32();
_interactionModule.PassCommand(132, _interactionModule.PassCommand(132,
JsonSerializer.Serialize(new JsonCallRequest { CommandId = 4, ObjectId = response.ContextId })); JsonSerializer.Serialize(new JsonCallRequest { CommandId = 4, ObjectId = response.ContextId }));
@@ -108,16 +108,45 @@ public class Tests
JsonSerializer.Deserialize<FinalCommandExecution>(_interactionModule.OutputBuffer.Last()) JsonSerializer.Deserialize<FinalCommandExecution>(_interactionModule.OutputBuffer.Last())
?.Result.ToString() ?.Result.ToString()
); );
_interactionModule.PassCommand(132, _interactionModule.PassCommand(132,
JsonSerializer.Serialize(new JsonCallRequest { CommandId = 2, ObjectId = response.ContextId })); JsonSerializer.Serialize(new JsonCallRequest { CommandId = 2, ObjectId = response.ContextId }));
_interactionModule.PassCommand(132, _interactionModule.PassCommand(132,
JsonSerializer.Serialize(new JsonCallRequest { CommandId = 2, ObjectId = response.ContextId })); JsonSerializer.Serialize(new JsonCallRequest { CommandId = 2, ObjectId = response.ContextId }));
var secondFull = JsonDocument.Parse(_interactionModule.OutputBuffer.Last()).RootElement.GetProperty("Result") var secondFull = JsonDocument.Parse(_interactionModule.OutputBuffer.Last()).RootElement.GetProperty("Result")
.GetInt32(); .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<TransmittedSharedObject<ITestParameter>>(
JsonSerializer.Deserialize<FinalCommandExecution>(_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<ITestParameter> { ContextId = x }
}
}));
var finalResponse = JsonDocument.Parse(_interactionModule.OutputBuffer.Last()).RootElement.GetProperty("Result").GetInt32();
Assert.That(finalResponse, Is.EqualTo(20));
} }
} }
@@ -8,9 +8,11 @@ public class JsonSerialisationModule : ISerialisationModule
{ {
private readonly IInteractionModule _dataSource; private readonly IInteractionModule _dataSource;
private IExecuteModule _executeModule; private IExecuteModule _executeModule;
public JsonSerialisationModule(IInteractionModule dataSource) private IMethodRepository _methodRepository;
public JsonSerialisationModule(IInteractionModule dataSource, IMethodRepository methodRepository)
{ {
_dataSource = dataSource; _dataSource = dataSource;
_methodRepository = methodRepository;
_dataSource.SetMessageHandler(HandleIncomingRequest); _dataSource.SetMessageHandler(HandleIncomingRequest);
} }
@@ -20,6 +22,12 @@ public class JsonSerialisationModule : ISerialisationModule
{ {
JsonCallRequest request = JsonSerializer.Deserialize<JsonCallRequest>(command); JsonCallRequest request = JsonSerializer.Deserialize<JsonCallRequest>(command);
request.ClientId = clientId; 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); var response = _executeModule.Execute(request);
PostResponse(response); PostResponse(response);
@@ -12,7 +12,7 @@ public class TransmittedSharedObject<T>
public int ContextId { get; set; } = -1; public int ContextId { get; set; } = -1;
[JsonIgnore] [JsonIgnore]
public T Value { get; set; } public T Value => (T)TransmissionConfig.DefaultContextRepository.GetObject(ContextId);
[JsonIgnore] [JsonIgnore]
public IContextRepository Context { get; set; } public IContextRepository Context { get; set; }
@@ -20,7 +20,7 @@ public class TransmittedSharedObject<T>
public static implicit operator T(TransmittedSharedObject<T> value) => value.Value; public static implicit operator T(TransmittedSharedObject<T> value) => value.Value;
public static implicit operator TransmittedSharedObject<T>(T value) => public static implicit operator TransmittedSharedObject<T>(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 Fill() => Value = (T)TransmissionConfig.DefaultContextRepository.GetObject(ContextId);
// public void Collect() => ContextId = TransmissionConfig.DefaultContextRepository.GetObjectIndex(ContextId); // public void Collect() => ContextId = TransmissionConfig.DefaultContextRepository.GetObjectIndex(ContextId);