Now handles top level files and recursive files in folders. Set max line length to be 100
53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
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 };
|