constructor(app: App, id: string, query: ClientQuery, conn: ReactiveSocket) { super(); this.connected = true; this.plugins = []; this.connection = conn; this.id = id; this.query = query; this.messageIdCounter = 0; this.app = app; this.broadcastCallbacks = new Map(); this.requestCallbacks = new Map(); const client = this; this.responder = { fireAndForget: (payload: {data: string}) => { client.onMessage(payload.data); }, }; conn.connectionStatus().subscribe({ onNext(payload) { if (payload.kind == 'ERROR' || payload.kind == 'CLOSED') { client.connected = false; } }, onSubscribe(subscription) { subscription.request(Number.MAX_SAFE_INTEGER); }, }); }
rawSend(method: string, params?: Object): void { const data = { method, params, }; this.app.logger.info(data, 'message:send'); this.connection.fireAndForget({data: JSON.stringify(data)}); }
return new Promise((resolve, reject) => { const id = this.messageIdCounter++; const metadata: RequestMetadata = { method, id, params, }; this.requestCallbacks.set(id, {reject, resolve, metadata}); const data = { id, method, params, }; this.app.logger.info(data, 'message:call'); this.startTimingRequestResponse({method, id, params}); this.connection.fireAndForget({data: JSON.stringify(data)}); });