// 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 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 forward(int devicePort, {int? hostPort}); /// Stops forwarding [forwardedPort]. Future unforward(ForwardedPort forwardedPort); /// Cleanup allocated resources, like [forwardedPorts]. Future dispose(); } // A port forwarder which does not support forwarding ports. class NoOpDevicePortForwarder implements DevicePortForwarder { const NoOpDevicePortForwarder(); @override Future forward(int devicePort, {int? hostPort}) async => devicePort; @override List get forwardedPorts => []; @override Future unforward(ForwardedPort forwardedPort) async {} @override Future dispose() async {} }