diff --git a/desktop/app/src/utils/js-client-server-utils/websocketClientFlipperConnection.tsx b/desktop/app/src/utils/js-client-server-utils/websocketClientFlipperConnection.tsx index a6e448071..c4639ab46 100644 --- a/desktop/app/src/utils/js-client-server-utils/websocketClientFlipperConnection.tsx +++ b/desktop/app/src/utils/js-client-server-utils/websocketClientFlipperConnection.tsx @@ -59,24 +59,37 @@ export class WebsocketClientFlipperConnection ); } - // TODO: fully implement and return actual result requestResponse(payload: Payload): Single> { return new Single((subscriber) => { - const method = - payload.data != null ? JSON.parse(payload.data).method : 'not-defined'; + const {id: callId = undefined, method = undefined} = + payload.data != null ? JSON.parse(payload.data) : {}; + subscriber.onSubscribe(() => {}); - if (method != 'getPlugins') { - this.fireAndForget(payload); + + if (method === 'getPlugins') { + subscriber.onComplete({ + data: JSON.stringify({ + success: {plugins: this.plugins}, + }), + }); + return; } - subscriber.onComplete( - method == 'getPlugins' - ? { - data: JSON.stringify({ - success: {plugins: this.plugins}, - }), - } - : {data: JSON.stringify({success: null})}, + + this.websocket.send( + JSON.stringify({ + type: 'call', + app: this.app, + payload: payload.data != null ? payload.data : {}, + }), ); + + this.websocket.on('message', (message: string) => { + const {app, payload} = JSON.parse(message); + + if (app === this.app && payload?.id === callId) { + subscriber.onComplete({data: JSON.stringify(payload)}); + } + }); }); } }