discoverApps static method
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;
}