import logger from '../logger'; export type FlattenedObjectData = { [attr: string]: any }; export type QueryData = { [attr: string]: any }; class Subscription { // It is query condition eg query.where query: QueryData; className: string; hash: string; clientRequestIds: Object; constructor(className: string, query: QueryData, queryHash: string) { this.className = className; this.query = query; this.hash = queryHash; this.clientRequestIds = new Map(); } addClientSubscription(clientId: number, requestId: number): void { if (!this.clientRequestIds.has(clientId)) { this.clientRequestIds.set(clientId, []); } const requestIds = this.clientRequestIds.get(clientId); requestIds.push(requestId); } deleteClientSubscription(clientId: number, requestId: number): void { const requestIds = this.clientRequestIds.get(clientId); if (typeof requestIds === 'undefined') { logger.error('Can not find client %d to delete', clientId); return; } const index = requestIds.indexOf(requestId); if (index < 0) { logger.error('Can not find client %d subscription %d to delete', clientId, requestId); return; } requestIds.splice(index, 1); // Delete client reference if it has no subscription if (requestIds.length == 0) { this.clientRequestIds.delete(clientId); } } hasSubscribingClient(): boolean { return this.clientRequestIds.size > 0; } } export { Subscription };