using System;
using System.Threading;
using System.Threading.Tasks;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.Server;
namespace Wino.Core.Domain.Interfaces
{
public interface IWinoServerConnectionManager
{
///
/// When the connection status changes, this event will be triggered.
///
event EventHandler StatusChanged;
///
/// Gets the connection status.
///
WinoServerConnectionStatus Status { get; }
///
/// Launches Full Trust process (Wino Server) and awaits connection completion.
/// If connection is not established in 10 seconds, it will return false.
/// If the server process is already running, it'll connect to existing one.
/// If the server process is not running, it'll be launched and connection establishment is awaited.
///
/// Whether connection is established or not.
Task ConnectAsync();
///
/// Queues a new user request to be processed by Wino Server.
/// Healthy connection must present before calling this method.
///
/// Request to queue for synchronizer in the server.
/// Account id to queueu request for.
Task QueueRequestAsync(IRequestBase request, Guid accountId);
///
/// Returns response from server for the given request.
///
/// Response type.
/// Request type.
/// Request type.
/// Response received from the server for the given TResponse type.
Task> GetResponseAsync(TRequestType clientMessage, CancellationToken cancellationToken = default) where TRequestType : IClientMessage;
///
/// Handle for connecting to the server.
/// If the server is already running, it'll connect to existing one.
/// Callers can await this handle to wait for connection establishment.
///
TaskCompletionSource ConnectingHandle { get; }
}
public interface IWinoServerConnectionManager : IWinoServerConnectionManager, IInitializeAsync
{
///
/// Existing connection handle to the server of TAppServiceConnection type.
///
TAppServiceConnection Connection { get; set; }
}
}