Написан фронтенд модуль json сериализации, mock модуль исполнения и тесты для потокового режима работы
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
using mROA.Implementation;
|
||||
|
||||
namespace mROA.Test;
|
||||
|
||||
public class StreamTest
|
||||
{
|
||||
private StreamBasedInteractionModule _interactionModule;
|
||||
private ISerialisationModule _serialisationModule;
|
||||
private IExecuteModule _executeModule;
|
||||
private IMethodRepository _methodRepository;
|
||||
private IContextRepository _contextRepository;
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_interactionModule = new StreamBasedInteractionModule();
|
||||
|
||||
_serialisationModule = new JsonSerialisationModule(_interactionModule, _methodRepository);
|
||||
|
||||
_executeModule = new MockExecModule();
|
||||
_serialisationModule.SetExecuteModule(_executeModule);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void StreamingTest()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace mROA.Implementation;
|
||||
|
||||
@@ -11,6 +10,11 @@ public class JsonFrontendSerialisationModule(IInteractionModule.IFrontendInterac
|
||||
{
|
||||
var receiveMessage = interactionModule.ReceiveMessage();
|
||||
var parsed = JsonSerializer.Deserialize<T>(receiveMessage);
|
||||
while (parsed.CallRequestId != requestId)
|
||||
{
|
||||
receiveMessage = interactionModule.ReceiveMessage();
|
||||
parsed = JsonSerializer.Deserialize<T>(receiveMessage);
|
||||
}
|
||||
return parsed;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
namespace mROA.Implementation;
|
||||
|
||||
public class StreamBasedFrontendInteractionModule : IInteractionModule.IFrontendInteractionModule
|
||||
{
|
||||
private Stream _serverStream;
|
||||
|
||||
public StreamBasedFrontendInteractionModule(Stream serverStream)
|
||||
{
|
||||
_serverStream = serverStream;
|
||||
}
|
||||
|
||||
public byte[] 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);
|
||||
var len = BitConverter.ToUInt16(buffer, 0);
|
||||
_serverStream.ReadExactly(buffer, 0, len);
|
||||
|
||||
return buffer[..len];
|
||||
}
|
||||
|
||||
public void PostMessage(byte[] message)
|
||||
{
|
||||
_serverStream.Write(BitConverter.GetBytes((ushort)message.Length), 0, sizeof(ushort));
|
||||
_serverStream.Write(message, 0, message.Length);
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,6 @@ public class MockExecModule : IExecuteModule
|
||||
public ICommandExecution Execute(ICallRequest command)
|
||||
{
|
||||
return new FinalCommandExecution
|
||||
{ ClientId = command.ClientId, CommandId = command.CommandId, Result = new { A = "wqer", B = 5 } };
|
||||
{ ClientId = command.ClientId, CommandId = command.CommandId, Result = new { A = "wqer", B = 5 }, CallRequestId = command.CallRequestId };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user