// SPDX-License-Identifier: AGPL-3.0-only
/**
* Digital Voice Modem - DVMConsole
* AGPLv3 Open Source. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* @package DVM / DVM Console
* @license AGPLv3 License (https://opensource.org/licenses/AGPL-3.0)
*
* Copyright (C) 2025 Caleb, K4PHP
*
*/
namespace DVMConsole
{
///
/// WhackerLink peer/client websocket manager for having multiple systems
///
public class FneSystemManager
{
private readonly Dictionary _webSocketHandlers;
///
/// Creates an instance of
///
public FneSystemManager()
{
_webSocketHandlers = new Dictionary();
}
///
/// Create a new for a new system
///
///
public void AddFneSystem(string systemId, Codeplug.System system, MainWindow mainWindow)
{
if (!_webSocketHandlers.ContainsKey(systemId))
{
_webSocketHandlers[systemId] = new PeerSystem(mainWindow, system);
}
}
///
/// Return a by looking up a systemid
///
///
///
///
public PeerSystem GetFneSystem(string systemId)
{
if (_webSocketHandlers.TryGetValue(systemId, out var handler))
{
return handler;
}
throw new KeyNotFoundException($"WebSocketHandler for system '{systemId}' not found.");
}
///
/// Delete a by system id
///
///
public void RemoveFneSystem(string systemId)
{
if (_webSocketHandlers.TryGetValue(systemId, out var handler))
{
handler.peer.Stop();
_webSocketHandlers.Remove(systemId);
}
}
///
/// Check if the manager has a handler
///
///
///
public bool HasFneSystem(string systemId)
{
return _webSocketHandlers.ContainsKey(systemId);
}
///
/// Cleanup
///
public void ClearAll()
{
foreach (var handler in _webSocketHandlers.Values)
{
handler.peer.Stop();
}
_webSocketHandlers.Clear();
}
}
}