async adbDiscoveryAndForwardRDPUnixSocket()

in src/extension-runners/firefox-android.js [456:524]


  async adbDiscoveryAndForwardRDPUnixSocket() {
    const {
      adbUtils,
      selectedAdbDevice,
      selectedFirefoxApk,
      params: { adbDiscoveryTimeout },
    } = this;

    const stdin = this.params.stdin || process.stdin;

    const { unixSocketDiscoveryRetryInterval } = FirefoxAndroidExtensionRunner;

    let { unixSocketDiscoveryMaxTime } = FirefoxAndroidExtensionRunner;

    if (typeof adbDiscoveryTimeout === 'number') {
      unixSocketDiscoveryMaxTime = adbDiscoveryTimeout;
    }

    const handleCtrlC = (str, key) => {
      if (key.ctrl && key.name === 'c') {
        adbUtils.setUserAbortDiscovery(true);
      }
    };

    // TODO: use noInput property to decide if we should
    // disable direct keypress handling.
    if (isTTY(stdin)) {
      readline.emitKeypressEvents(stdin);
      setRawMode(stdin, true);

      stdin.on('keypress', handleCtrlC);
    }

    try {
      // Got a debugger socket file to connect.
      this.selectedRDPSocketFile = await adbUtils.discoverRDPUnixSocket(
        selectedAdbDevice,
        selectedFirefoxApk,
        {
          maxDiscoveryTime: unixSocketDiscoveryMaxTime,
          retryInterval: unixSocketDiscoveryRetryInterval,
        },
      );
    } finally {
      if (isTTY(stdin)) {
        stdin.removeListener('keypress', handleCtrlC);
      }
    }

    log.debug(`RDP Socket File selected: ${this.selectedRDPSocketFile}`);

    const tcpPort = await findFreeTcpPort();

    // Log the chosen tcp port at info level (useful to the user to be able
    // to connect the Firefox DevTools to the Firefox for Android instance).
    log.info(`You can connect to this Android device on TCP port ${tcpPort}`);

    const forwardSocketSpec = this.selectedRDPSocketFile.startsWith('@')
      ? `localabstract:${this.selectedRDPSocketFile.substr(1)}`
      : `localfilesystem:${this.selectedRDPSocketFile}`;

    await adbUtils.setupForward(
      selectedAdbDevice,
      forwardSocketSpec,
      `tcp:${tcpPort}`,
    );

    this.selectedTCPPort = tcpPort;
  }