ntfy/web/src/app/ConnectionManager.js

44 lines
1.6 KiB
JavaScript
Raw Normal View History

import Connection from "./Connection";
class ConnectionManager {
constructor() {
this.connections = new Map();
}
refresh(subscriptions, users, onNotification) {
if (!subscriptions || !users) {
return;
}
console.log(`[ConnectionManager] Refreshing connections`);
2022-03-02 21:16:30 +00:00
const subscriptionIds = subscriptions.map(s => s.id);
const deletedIds = Array.from(this.connections.keys()).filter(id => !subscriptionIds.includes(id));
// Create and add new connections
2022-03-02 21:16:30 +00:00
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);
2022-02-28 00:29:17 +00:00
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;