using System; using System.Threading; using System.Threading.Tasks; using mROA.Implementation; using mROA.Implementation.CommandExecution; namespace mROA.Abstract { public interface ISerialisationModule : IInjectableModule { void HandleIncomingRequest(int clientId, byte[] message); void PostResponse(NetworkMessage message, int clientId); void SendWelcomeMessage(int clientId); public interface IFrontendSerialisationModule : IInjectableModule { int ClientId { get; } Task GetNextCommandExecution(Guid requestId) where T : ICommandExecution; Task> GetFinalCommandExecution(Guid requestId); void PostCallRequest(ICallRequest callRequest); } } public interface IRepresentationModule : IInjectableModule { int Id { get; } Task GetMessageAsync(Guid? requestId = null, MessageType? messageType = null, CancellationToken token = default); T GetMessage(Guid? requestId = null, MessageType? messageType = null); Task GetRawMessage(Guid? requestId = null, MessageType? messageType = null, CancellationToken token = default); Task PostCallMessageAsync(Guid id, MessageType messageType, T payload) where T : notnull; Task PostCallMessageAsync(Guid id, MessageType messageType, object payload, Type payloadType); void PostCallMessage(Guid id, MessageType messageType, T payload) where T : notnull; void PostCallMessage(Guid id, MessageType messageType, object payload, Type payloadType); } }