// 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(); } } }