Files
mROA/mROA/Implementation/Frontend/JsonFrontendSerialisationModule.cs
T

39 lines
1.5 KiB
C#
Raw Normal View History

using System.Text;
2025-01-15 10:14:21 +03:00
using System.Text.Json;
namespace mROA.Implementation;
public class JsonFrontendSerialisationModule(IInteractionModule.IFrontendInteractionModule interactionModule)
: ISerialisationModule.IFrontendSerialisationModule
2025-01-15 10:14:21 +03:00
{
public async Task<T> GetNextCommandExecution<T>(Guid requestId) where T : ICommandExecution
2025-01-15 10:14:21 +03:00
{
var receiveMessage = await interactionModule.ReceiveMessage();
var parsed = JsonSerializer.Deserialize<T>(receiveMessage);
while (parsed.CallRequestId != requestId)
{
receiveMessage = await interactionModule.ReceiveMessage();
parsed = JsonSerializer.Deserialize<T>(receiveMessage);
}
return parsed;
2025-01-15 10:14:21 +03:00
}
2025-02-04 18:40:47 +03:00
public async Task<FinalCommandExecution> GetFinalCommandExecution<T>(Guid requestId)
{
var receiveMessage = await interactionModule.ReceiveMessage();
var parsed = JsonSerializer.Deserialize<FinalCommandExecution>(receiveMessage);
while (parsed.CallRequestId != requestId)
{
receiveMessage = await interactionModule.ReceiveMessage();
parsed = JsonSerializer.Deserialize<FinalCommandExecution>(receiveMessage);
}
parsed.Result = parsed.Result! is JsonElement e ? e.Deserialize<T>() : (T)parsed.Result!;
return parsed;
}
2025-01-15 10:14:21 +03:00
public void PostCallRequest(ICallRequest callRequest)
{
var post = JsonSerializer.Serialize(callRequest, callRequest.GetType());
interactionModule.PostMessage(Encoding.UTF8.GetBytes(post));
2025-01-15 10:14:21 +03:00
}
}