улучшен новый модуль взаимодействия и написан новый модуль репрезентации

This commit is contained in:
2025-02-16 17:05:16 +03:00
parent 5e9c2cbb7b
commit 5c643dd2c9
8 changed files with 73 additions and 68 deletions
@@ -0,0 +1,44 @@
using mROA.Abstract;
namespace mROA.Implementation;
public class RepresentationModule : IRepresentationModule
{
private ISerializationToolkit _serialization;
private INextGenerationInteractionModule _interaction;
public void Inject<T>(T dependency)
{
switch (dependency)
{
case ISerializationToolkit toolkit:
_serialization = toolkit;
break;
case INextGenerationInteractionModule interactionModule:
_interaction = interactionModule;
break;
}
}
public int Id { get; set; }
public async Task<T> GetMessage<T>(Guid? requestId, MessageType? messageType)
{
while (true)
{
var message = await _interaction.GetNextMessageReceiving();
if ((requestId is null || message.Id == requestId) && (messageType is null || message.SchemaId == messageType))
return _serialization.Deserialize<T>(message.Data)!;
}
}
public async Task PostCallMessage<T>(Guid id, MessageType messageType, T payload)
{
await PostCallMessage(id, messageType, payload, typeof(T));
}
public async Task PostCallMessage(Guid id, MessageType messageType, object payload, Type payloadType)
{
await _interaction.PostMessage(new NetworkMessage {Id = id, SchemaId = messageType, Data = _serialization.Serialize(payload, payloadType)});
}
}