scan static method

Future<List<RemoteSessionInfo>> scan({
  1. String subnet = '127.0.0.1',
  2. List<int> ports = const [3100, 3101, 3102, 3103, 3104],
  3. Duration timeout = const Duration(seconds: 2),
})

Scan for remote sessions on common ports.

Implementation

static Future<List<RemoteSessionInfo>> scan({
  String subnet = '127.0.0.1',
  List<int> ports = const [3100, 3101, 3102, 3103, 3104],
  Duration timeout = const Duration(seconds: 2),
}) async {
  final results = <RemoteSessionInfo>[];

  for (final port in ports) {
    try {
      final client = HttpClient();
      client.connectionTimeout = timeout;

      final request = await client.getUrl(
        Uri.parse('http://$subnet:$port/api/status'),
      );
      final response = await request.close();

      if (response.statusCode == 200) {
        final body = await response.transform(utf8.decoder).join();
        final json = jsonDecode(body) as Map<String, dynamic>;

        results.add(
          RemoteSessionInfo(
            sessionId: 'discovered_${subnet}_$port',
            hostId: subnet,
            displayName: json['displayName'] as String? ?? '$subnet:$port',
            state: RemoteSessionState.connected,
            connectionType: RemoteConnectionType.direct,
            connectedAt: DateTime.now(),
            remoteAddress: subnet,
            remotePort: port,
            model: json['model'] as String?,
            metadata: json,
          ),
        );
      }

      client.close();
    } catch (_) {
      // Host/port not available.
    }
  }

  return results;
}