Написан фронтенд модуль json сериализации, mock модуль исполнения и тесты для потокового режима работы

This commit is contained in:
2025-02-01 13:40:06 +03:00
parent 99c938fb48
commit 7fdff923a3
4 changed files with 65 additions and 2 deletions
+28
View File
@@ -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;
using System.Text.Json; using System.Text.Json;
using System.Windows.Input;
namespace mROA.Implementation; namespace mROA.Implementation;
@@ -11,6 +10,11 @@ public class JsonFrontendSerialisationModule(IInteractionModule.IFrontendInterac
{ {
var receiveMessage = interactionModule.ReceiveMessage(); var receiveMessage = interactionModule.ReceiveMessage();
var parsed = JsonSerializer.Deserialize<T>(receiveMessage); var parsed = JsonSerializer.Deserialize<T>(receiveMessage);
while (parsed.CallRequestId != requestId)
{
receiveMessage = interactionModule.ReceiveMessage();
parsed = JsonSerializer.Deserialize<T>(receiveMessage);
}
return parsed; 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);
}
}
+1 -1
View File
@@ -5,6 +5,6 @@ public class MockExecModule : IExecuteModule
public ICommandExecution Execute(ICallRequest command) public ICommandExecution Execute(ICallRequest command)
{ {
return new FinalCommandExecution 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 };
} }
} }