// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.

using System;
using System.Threading;
using System.Threading.Tasks;
using osu.Framework.Bindables;

namespace osu.Game.Online.Notifications.WebSocket
{
    /// <summary>
    /// A client for asynchronous notifications sent by osu-web.
    /// </summary>
    public interface INotificationsClient
    {
        /// <summary>
        /// Whether this <see cref="INotificationsClient"/> is currently connected to a server.
        /// </summary>
        IBindable<bool> IsConnected { get; }

        /// <summary>
        /// Invoked when a new <see cref="SocketMessage"/> arrives for this client.
        /// </summary>
        event Action<SocketMessage>? MessageReceived;

        /// <summary>
        /// Sends a <see cref="SocketMessage"/> to the notification server.
        /// </summary>
        Task SendAsync(SocketMessage message, CancellationToken? cancellationToken = default);
    }
}