discoverApps static method

Future<List<DiscoveredApp>> discoverApps({
  1. String? workspaceFilter,
  2. Duration timeout = const Duration(seconds: 10),
})

Connects to every local DTD instance and collects the VM Service URIs of the apps they manage.

workspaceFilter optionally narrows results by workspace root, which is useful when several apps are running.

Implementation

static Future<List<DiscoveredApp>> discoverApps({
  String? workspaceFilter,
  Duration timeout = const Duration(seconds: 10),
}) async {
  final instances = await listDtdInstances();
  final apps = <DiscoveredApp>[];

  for (final instance in instances) {
    if (workspaceFilter != null &&
        !_matches(instance.workspaceRoot, workspaceFilter)) {
      continue;
    }

    DartToolingDaemon? dtd;
    try {
      dtd = await DartToolingDaemon.connect(instance.uri).timeout(timeout);
      final response = await dtd.getVmServices().timeout(timeout);
      for (final info in response.vmServicesInfos) {
        apps.add(
          DiscoveredApp(
            // `exposedUri` is the one to dial from this machine.
            vmServiceUri: info.exposedUri ?? info.uri,
            name: info.name,
            workspaceRoot: instance.workspaceRoot,
            dartVersion: instance.dartVersion,
          ),
        );
      }
    } on Object {
      // A DTD we cannot reach (stale entry, or shutting down) is skipped
      // rather than failing the whole discovery.
    } finally {
      try {
        await dtd?.close();
      } on Object {
        // Best effort.
      }
    }
  }
  return apps;
}