тесты
This commit is contained in:
@@ -2,6 +2,8 @@
|
|||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mROA", "mROA\mROA.csproj", "{AE4E93F6-7B91-41FC-9BEA-2C8C2CBE1CB6}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mROA", "mROA\mROA.csproj", "{AE4E93F6-7B91-41FC-9BEA-2C8C2CBE1CB6}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mROA.Test", "mROA.Test\mROA.Test.csproj", "{D0E5760B-BB6E-453A-B396-A972CD94F133}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -12,5 +14,9 @@ Global
|
|||||||
{AE4E93F6-7B91-41FC-9BEA-2C8C2CBE1CB6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{AE4E93F6-7B91-41FC-9BEA-2C8C2CBE1CB6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{AE4E93F6-7B91-41FC-9BEA-2C8C2CBE1CB6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{AE4E93F6-7B91-41FC-9BEA-2C8C2CBE1CB6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{AE4E93F6-7B91-41FC-9BEA-2C8C2CBE1CB6}.Release|Any CPU.Build.0 = Release|Any CPU
|
{AE4E93F6-7B91-41FC-9BEA-2C8C2CBE1CB6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{D0E5760B-BB6E-453A-B396-A972CD94F133}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{D0E5760B-BB6E-453A-B396-A972CD94F133}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{D0E5760B-BB6E-453A-B396-A972CD94F133}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{D0E5760B-BB6E-453A-B396-A972CD94F133}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|||||||
@@ -2,5 +2,6 @@ namespace mROA;
|
|||||||
|
|
||||||
public interface IInteractionModule
|
public interface IInteractionModule
|
||||||
{
|
{
|
||||||
|
void SetMessageHandler(Action<int, string> handler);
|
||||||
void SendTo(int clientId, byte[] message);
|
void SendTo(int clientId, byte[] message);
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
public class FinalCommandExecution : ICommandExecution
|
public class FinalCommandExecution : ICommandExecution
|
||||||
{
|
{
|
||||||
public Guid ExecutionId { get; init; } = new Guid();
|
public Guid ExecutionId { get; init; } = Guid.NewGuid();
|
||||||
public int ClientId { get; set; }
|
public int ClientId { get; set; }
|
||||||
public int CommandId { get; set; }
|
public int CommandId { get; set; }
|
||||||
public object? Result { get; set; }
|
public object? Result { get; set; }
|
||||||
@@ -10,7 +10,7 @@ public class FinalCommandExecution : ICommandExecution
|
|||||||
|
|
||||||
public class ExeptionCommandExecution : ICommandExecution
|
public class ExeptionCommandExecution : ICommandExecution
|
||||||
{
|
{
|
||||||
public Guid ExecutionId { get; init; } = new Guid();
|
public Guid ExecutionId { get; init; } = Guid.NewGuid();
|
||||||
public int ClientId { get; set; }
|
public int ClientId { get; set; }
|
||||||
public int CommandId { get; set; }
|
public int CommandId { get; set; }
|
||||||
public string Reason { get; set; }
|
public string Reason { get; set; }
|
||||||
@@ -18,7 +18,7 @@ public class ExeptionCommandExecution : ICommandExecution
|
|||||||
|
|
||||||
public class AsyncCommandExecution : ICommandExecution
|
public class AsyncCommandExecution : ICommandExecution
|
||||||
{
|
{
|
||||||
public Guid ExecutionId { get; init; } = new Guid();
|
public Guid ExecutionId { get; init; } = Guid.NewGuid();
|
||||||
public int ClientId { get; set; }
|
public int ClientId { get; set; }
|
||||||
public int CommandId { get; set; }
|
public int CommandId { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,18 @@ using System.Text.Json.Serialization;
|
|||||||
|
|
||||||
namespace mROA.Implementation;
|
namespace mROA.Implementation;
|
||||||
|
|
||||||
public class InputModule(IInteractionModule dataSource, IExecuteModule executeModule)
|
public class InputModule : IInputModule
|
||||||
: IInputModule
|
|
||||||
{
|
{
|
||||||
|
private readonly IInteractionModule _dataSource;
|
||||||
|
private readonly IExecuteModule _executeModule;
|
||||||
|
|
||||||
|
public InputModule(IInteractionModule dataSource, IExecuteModule executeModule)
|
||||||
|
{
|
||||||
|
_dataSource = dataSource;
|
||||||
|
_executeModule = executeModule;
|
||||||
|
_dataSource.SetMessageHandler(HandleIncomingRequest);
|
||||||
|
}
|
||||||
|
|
||||||
public void HandleIncomingRequest(int clientId, string command)
|
public void HandleIncomingRequest(int clientId, string command)
|
||||||
{
|
{
|
||||||
var type = JsonDocument.Parse(command).RootElement.GetProperty("RequestTypeId").GetInt32();
|
var type = JsonDocument.Parse(command).RootElement.GetProperty("RequestTypeId").GetInt32();
|
||||||
@@ -29,17 +38,24 @@ public class InputModule(IInteractionModule dataSource, IExecuteModule executeMo
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
var response = executeModule.Execute(request);
|
request.ClientId = clientId;
|
||||||
|
var response = _executeModule.Execute(request);
|
||||||
var texted = JsonSerializer.Serialize(response);
|
var texted = string.Empty;
|
||||||
|
if (response is FinalCommandExecution finalCommand)
|
||||||
|
{
|
||||||
|
texted = JsonSerializer.Serialize(finalCommand);
|
||||||
|
}else if (response is AsyncCommandExecution asyncCommand)
|
||||||
|
{
|
||||||
|
texted = JsonSerializer.Serialize(asyncCommand);
|
||||||
|
}
|
||||||
var binary = Encoding.UTF8.GetBytes(texted);
|
var binary = Encoding.UTF8.GetBytes(texted);
|
||||||
dataSource.SendTo(clientId, binary);
|
_dataSource.SendTo(clientId, binary);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PostResponse(ICommandExecution call)
|
public void PostResponse(ICommandExecution call)
|
||||||
{
|
{
|
||||||
var texted = JsonSerializer.Serialize(call);
|
var texted = JsonSerializer.Serialize(call);
|
||||||
var binary = Encoding.UTF8.GetBytes(texted);
|
var binary = Encoding.UTF8.GetBytes(texted);
|
||||||
dataSource.SendTo(call.ClientId, binary);
|
_dataSource.SendTo(call.ClientId, binary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
namespace mROA.Implementation;
|
|
||||||
|
|
||||||
public class ConsoleInteractionChanel(IInputModule inputModule) : IInteractionModule
|
|
||||||
{
|
|
||||||
public void StartListeningKeyboard()
|
|
||||||
{
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
var input = Console.ReadLine();
|
|
||||||
inputModule.HandleIncomingRequest(123, input);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SendTo(int clientId, byte[] message)
|
|
||||||
{
|
|
||||||
Console.WriteLine("{0}: {1}", clientId, System.Text.Encoding.UTF8.GetString(message));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
namespace mROA.Implementation;
|
||||||
|
|
||||||
|
public class ProgramlyInteractionChanel : IInteractionModule
|
||||||
|
{
|
||||||
|
public void PassCommand(int clientId, string message) => _handler(clientId, message);
|
||||||
|
private Action<int, string> _handler;
|
||||||
|
|
||||||
|
public List<string> OutputBuffer = new List<string>();
|
||||||
|
|
||||||
|
public void SetMessageHandler(Action<int, string> handler)
|
||||||
|
{
|
||||||
|
_handler = handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendTo(int clientId, byte[] message)
|
||||||
|
{
|
||||||
|
Console.WriteLine("{0}: {1}", clientId, System.Text.Encoding.UTF8.GetString(message));
|
||||||
|
OutputBuffer.Add(System.Text.Encoding.UTF8.GetString(message));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user