// Copyright (C) 2026, The Duplicati Team
// https://duplicati.com, hello@duplicati.com
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System.Net.WebSockets;
namespace Duplicati.WebserverCore.Abstractions.Notifications;
///
/// The services that can be subscribed to via the websocket connection.
///
public enum SubscriptionService
{
///
/// The legacy status of the server, including active tasks.
///
LegacyStatus,
///
/// Data has been updated or changed, such as backup configurations
///
BackupList,
///
/// Server settings updates
///
ServerSettings,
///
/// Progress updates for ongoing tasks, such as backups or restores.
///
Progress,
///
/// The task queue updates, when tasks are added, removed, or changed in the queue.
///
TaskQueue,
///
/// Completed tasks updates, such as when a task finishes or fails.
///
TaskCompleted,
///
/// Notification messages
///
Notifications,
///
/// Scheduler updates, such as when scheduled tasks are added, removed, or changed.
///
Scheduler
}
///
/// Interface for managing WebSocket connections and handling messages.
///
public interface IWebsocketAccessor
{
///
/// Adds a new WebSocket connection to the list of active connections.
///
/// The new WebSocket connection to add.
/// If true, the connection will subscribe to legacy status updates.
/// A task representing the asynchronous operation.
Task AddConnection(WebSocket newConnection, bool subscribeToLegacyStatus);
}