Reconnect when adb server gets killed

Summary:
Flipper tracks devices on an adb connection. If the adb server gets killed, it deletes all devices, but doesn't attempt to reconnect.
This gets it to rety after 500ms.

Reviewed By: priteshrnandgaonkar

Differential Revision: D10526974

fbshipit-source-id: a2101067f2245b728f458fc5e06dc68833c5e772
This commit is contained in:
John Knox
2018-10-24 08:10:26 -07:00
committed by Facebook Github Bot
parent bd25e5e97c
commit d1a1c299dc

View File

@@ -12,7 +12,7 @@ import type BaseDevice from '../devices/BaseDevice';
import type Logger from '../fb-stubs/Logger.js'; import type Logger from '../fb-stubs/Logger.js';
const adb = require('adbkit-fb'); const adb = require('adbkit-fb');
function createDecive(client, device): Promise<AndroidDevice> { function createDevice(client, device): Promise<AndroidDevice> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const type = const type =
device.type !== 'device' || device.id.startsWith('emulator') device.type !== 'device' || device.id.startsWith('emulator')
@@ -56,17 +56,20 @@ function getRunningEmulatorName(id: string): Promise<?string> {
export default (store: Store, logger: Logger) => { export default (store: Store, logger: Logger) => {
const client = adb.createClient(); const client = adb.createClient();
const watchAndroidDevices = () => {
// get emulators // get emulators
child_process.exec( child_process.exec(
'$ANDROID_HOME/tools/emulator -list-avds', '$ANDROID_HOME/tools/emulator -list-avds',
(error: ?Error, data: ?string) => { (error: ?Error, data: ?string) => {
if (error == null && data != null) { if (error != null || data == null) {
console.error(error || 'Failed to list AVDs');
return;
}
const payload = data.split('\n').filter(Boolean); const payload = data.split('\n').filter(Boolean);
store.dispatch({ store.dispatch({
type: 'REGISTER_ANDROID_EMULATORS', type: 'REGISTER_ANDROID_EMULATORS',
payload, payload,
}); });
}
}, },
); );
@@ -85,9 +88,8 @@ export default (store: Store, logger: Logger) => {
type: 'UNREGISTER_DEVICES', type: 'UNREGISTER_DEVICES',
payload: new Set(deviceIDsToRemove), payload: new Set(deviceIDsToRemove),
}); });
console.error( console.error('adb server was shutdown');
'adb server shutdown. Run `adb start-server` and restart Flipper.', setTimeout(watchAndroidDevices, 500);
);
} else { } else {
throw err; throw err;
} }
@@ -95,7 +97,7 @@ export default (store: Store, logger: Logger) => {
tracker.on('add', async device => { tracker.on('add', async device => {
if (device.type !== 'offline') { if (device.type !== 'offline') {
const androidDevice = await createDecive(client, device); const androidDevice = await createDevice(client, device);
store.dispatch({ store.dispatch({
type: 'REGISTER_DEVICE', type: 'REGISTER_DEVICE',
payload: androidDevice, payload: androidDevice,
@@ -110,7 +112,7 @@ export default (store: Store, logger: Logger) => {
payload: new Set([device.id]), payload: new Set([device.id]),
}); });
} else { } else {
const androidDevice = await createDecive(client, device); const androidDevice = await createDevice(client, device);
store.dispatch({ store.dispatch({
type: 'REGISTER_DEVICE', type: 'REGISTER_DEVICE',
payload: androidDevice, payload: androidDevice,
@@ -132,4 +134,7 @@ export default (store: Store, logger: Logger) => {
throw err; throw err;
} }
}); });
};
watchAndroidDevices();
}; };