Fix wss connection initialisation race
Summary: The websocket server has a race condition where it only starts listening for messages after the client has finished setting up. This lets it queue up messages if the client isn't ready. Reviewed By: passy Differential Revision: D21256218 fbshipit-source-id: fa8481e11225cc473f03f3afbf4d0c50a48cec91
This commit is contained in:
committed by
Facebook GitHub Bot
parent
5c00cfe542
commit
fcb89b94b5
@@ -193,6 +193,7 @@ class Server extends EventEmitter {
|
|||||||
case 'connect': {
|
case 'connect': {
|
||||||
const app = message.app;
|
const app = message.app;
|
||||||
const plugins = message.plugins;
|
const plugins = message.plugins;
|
||||||
|
let resolvedClient: Client | null = null;
|
||||||
const client = this.addConnection(
|
const client = this.addConnection(
|
||||||
new WebsocketClientFlipperConnection(ws, app, plugins),
|
new WebsocketClientFlipperConnection(ws, app, plugins),
|
||||||
{
|
{
|
||||||
@@ -203,15 +204,18 @@ class Server extends EventEmitter {
|
|||||||
sdk_version: 1,
|
sdk_version: 1,
|
||||||
},
|
},
|
||||||
{},
|
{},
|
||||||
);
|
).then((c) => (resolvedClient = c));
|
||||||
clients[app] = client;
|
clients[app] = client;
|
||||||
client.then((c) => {
|
|
||||||
ws.on('message', (m: any) => {
|
ws.on('message', (m: any) => {
|
||||||
const parsed = JSON.parse(m.toString());
|
const parsed = JSON.parse(m.toString());
|
||||||
if (parsed.app === app) {
|
if (parsed.app === app) {
|
||||||
c.onMessage(JSON.stringify(parsed.payload));
|
const message = JSON.stringify(parsed.payload);
|
||||||
|
if (resolvedClient) {
|
||||||
|
resolvedClient.onMessage(message);
|
||||||
}
|
}
|
||||||
});
|
client.then((c) => c.onMessage(message));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user