// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:async'; import 'base/io.dart'; class ForwardedPort { ForwardedPort(this.hostPort, this.devicePort) : context = null; ForwardedPort.withContext(this.hostPort, this.devicePort, this.context); final int hostPort; final int devicePort; final Process? context; @override String toString() => 'ForwardedPort HOST:$hostPort to DEVICE:$devicePort'; /// Kill subprocess (if present) used in forwarding. void dispose() { if (context != null) { context!.kill(); } } } /// Forward ports from the host machine to the device. abstract class DevicePortForwarder { /// Returns a Future that completes with the current list of forwarded /// ports for this device. List<ForwardedPort> get forwardedPorts; /// Forward [hostPort] on the host to [devicePort] on the device. /// If [hostPort] is null or zero, will auto select a host port. /// Returns a Future that completes with the host port. Future<int> forward(int devicePort, { int? hostPort }); /// Stops forwarding [forwardedPort]. Future<void> unforward(ForwardedPort forwardedPort); /// Cleanup allocated resources, like [forwardedPorts]. Future<void> dispose(); } // A port forwarder which does not support forwarding ports. class NoOpDevicePortForwarder implements DevicePortForwarder { const NoOpDevicePortForwarder(); @override Future<int> forward(int devicePort, { int? hostPort }) async => devicePort; @override List<ForwardedPort> get forwardedPorts => <ForwardedPort>[]; @override Future<void> unforward(ForwardedPort forwardedPort) async { } @override Future<void> dispose() async { } }