From 11a27f9e1a2623c0ca029be75bfa8c42b3fb0ee9 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Wed, 22 Sep 2021 09:01:29 -0700 Subject: [PATCH] Support forward command [6/n] Summary: Support the adb forward command Reviewed By: jameslawson Differential Revision: D31055957 fbshipit-source-id: bc0593320d0e187ddfc8120c1684746f9e9c4cf5 --- desktop/app/src/devices/BaseDevice.tsx | 9 +++++++++ desktop/app/src/server/FlipperServerImpl.tsx | 2 ++ desktop/app/src/server/devices/ServerDevice.tsx | 4 ++++ desktop/app/src/server/devices/android/AndroidDevice.tsx | 4 ++++ desktop/flipper-plugin/src/types/server-types.tsx | 5 +++++ desktop/types/adbkit.d.ts | 1 + 6 files changed, 25 insertions(+) diff --git a/desktop/app/src/devices/BaseDevice.tsx b/desktop/app/src/devices/BaseDevice.tsx index 76bf85b50..1e8d4fb01 100644 --- a/desktop/app/src/devices/BaseDevice.tsx +++ b/desktop/app/src/devices/BaseDevice.tsx @@ -233,6 +233,15 @@ export default class BaseDevice { return this.flipperServer.exec('metro-command', this.serial, command); } + async forwardPort(local: string, remote: string): Promise { + return this.flipperServer.exec( + 'device-forward-port', + this.serial, + local, + remote, + ); + } + supportsPlugin(plugin: PluginDefinition | PluginDetails) { let pluginDetails: PluginDetails; if (plugin instanceof _SandyPluginDefinition) { diff --git a/desktop/app/src/server/FlipperServerImpl.tsx b/desktop/app/src/server/FlipperServerImpl.tsx index f412e021b..f6613b469 100644 --- a/desktop/app/src/server/FlipperServerImpl.tsx +++ b/desktop/app/src/server/FlipperServerImpl.tsx @@ -258,6 +258,8 @@ export class FlipperServerImpl implements FlipperServer { } device.sendCommand(command); }, + 'device-forward-port': async (serial, local, remote) => + this.getDevice(serial).forwardPort(local, remote), }; registerDevice(device: ServerDevice) { diff --git a/desktop/app/src/server/devices/ServerDevice.tsx b/desktop/app/src/server/devices/ServerDevice.tsx index c9d48bd92..2f8fb5f28 100644 --- a/desktop/app/src/server/devices/ServerDevice.tsx +++ b/desktop/app/src/server/devices/ServerDevice.tsx @@ -69,4 +69,8 @@ export abstract class ServerDevice { async executeShell(_command: string): Promise { throw new Error('executeShell not implemented on BaseDevice'); } + + async forwardPort(_local: string, _remote: string): Promise { + throw new Error('forwardPort not implemented on BaseDevice'); + } } diff --git a/desktop/app/src/server/devices/android/AndroidDevice.tsx b/desktop/app/src/server/devices/android/AndroidDevice.tsx index 06fbcd421..d1bc21678 100644 --- a/desktop/app/src/server/devices/android/AndroidDevice.tsx +++ b/desktop/app/src/server/devices/android/AndroidDevice.tsx @@ -264,6 +264,10 @@ export default class AndroidDevice extends ServerDevice { return destination; } + async forwardPort(local: string, remote: string): Promise { + return this.adb.forward(this.serial, local, remote); + } + disconnect() { if (this.recordingProcess) { this.stopScreenCapture(); diff --git a/desktop/flipper-plugin/src/types/server-types.tsx b/desktop/flipper-plugin/src/types/server-types.tsx index 40a925e2f..2d980533a 100644 --- a/desktop/flipper-plugin/src/types/server-types.tsx +++ b/desktop/flipper-plugin/src/types/server-types.tsx @@ -83,6 +83,11 @@ export type FlipperServerCommands = { ) => Promise; 'device-stop-screencapture': (serial: string) => Promise; // file path 'device-shell-exec': (serial: string, command: string) => Promise; + 'device-forward-port': ( + serial: string, + local: string, + remote: string, + ) => Promise; 'metro-command': (serial: string, command: string) => Promise; }; diff --git a/desktop/types/adbkit.d.ts b/desktop/types/adbkit.d.ts index 7a23542d0..9b41fd29b 100644 --- a/desktop/types/adbkit.d.ts +++ b/desktop/types/adbkit.d.ts @@ -69,6 +69,7 @@ declare module 'adbkit' { getProperties: (serial: string) => Promise<{[key: string]: string}>; trackDevices: () => Promise; kill: () => Promise; + forward: (serial: string, local: string, remote: string) => Promise; } export function createClient(config: {port: number; host: string}): Client; }