Fix device connection timeout notification

Summary:
Currently, when a new app connects to Flipper, we show a lost connection notification even though it successfully connects to Flipper.
It happens because we of the device_id mismatch.

Reviewed By: mweststrate

Differential Revision: D32169917

fbshipit-source-id: 6df3ae7fd621b4549e18c1835473a13f18cfb339
This commit is contained in:
Andrey Goncharov
2021-11-04 09:11:50 -07:00
committed by Facebook GitHub Bot
parent 6bcb5a435b
commit 9d41c3c44c

View File

@@ -294,14 +294,14 @@ class ServerController extends EventEmitter implements ServerEventsListener {
deviceName: clientQuery.device,
appName: appNameWithUpdateHint(clientQuery),
};
// TODO: if multiple clients are establishing a connection
// at the same time, then this unresponsive timeout can potentially
// lead to errors. For example, client A starts connectiving followed
// by client B. Client B timeHandler will override client A, thus, if
// client A takes longer, then the unresponsive timeout will not be called
// for it.
this.timeHandlers.set(
clientQueryToKey(clientQuery),
// In the original insecure connection request, `device_id` is set to "unknown".
// Flipper queries adb/idb to learn the device ID and provides it back to the app.
// Once app knows it, it starts using the correct device ID for its subsequent secure connections.
// When the app re-connects securely after the cert exchange process, we need to cancel this timeout.
// Since the original clientQuery has `device_id` set to "unknown", we update it here with the correct `device_id` to find it and cancel it later.
clientQueryToKey({...clientQuery, device_id: response.deviceId}),
setTimeout(() => {
this.emit('client-unresponsive-error', {
client,