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; } } }