связанная передача параметров работает
This commit is contained in:
@@ -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
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user