import Connection from "./Connection"; class ConnectionManager { constructor() { this.connections = new Map(); } refresh(subscriptions, users, onNotification) { if (!subscriptions || !users) { return; } console.log(`[ConnectionManager] Refreshing connections`); const subscriptionIds = subscriptions.map(s => s.id); const deletedIds = Array.from(this.connections.keys()).filter(id => !subscriptionIds.includes(id)); // Create and add new connections subscriptions.forEach(subscription => { const id = subscription.id; const added = !this.connections.get(id) if (added) { const baseUrl = subscription.baseUrl; const topic = subscription.topic; const [user] = users.filter(user => user.baseUrl === baseUrl); const since = subscription.last; const connection = new Connection(id, baseUrl, topic, user, since, onNotification); this.connections.set(id, connection); console.log(`[ConnectionManager] Starting new connection ${id}`); connection.start(); } }); // Delete old connections deletedIds.forEach(id => { console.log(`[ConnectionManager] Closing connection ${id}`); const connection = this.connections.get(id); this.connections.delete(id); connection.close(); }); } } const connectionManager = new ConnectionManager(); export default connectionManager;