search method
Implementation
Future<List<CastDevice>> search({Duration timeout = const Duration(seconds: 5)}) async {
final results = <CastDevice>[];
final discovery = BonsoirDiscovery(type: _domain);
await discovery.initialize();
discovery.eventStream!.listen((event) {
switch (event) {
case BonsoirDiscoveryServiceFoundEvent():
event.service.resolve(discovery.serviceResolver);
break;
case BonsoirDiscoveryServiceResolvedEvent():
final port = event.service.port;
final host = event.service.toJson()['service.ip'] ??
event.service.toJson()['service.host'];
String name = [
event.service.attributes['md'],
event.service.attributes['fn'],
].whereType<String>().join(' - ');
if (name.isEmpty) {
name = event.service.name;
}
results.add(
CastDevice(
serviceName: event.service.name,
name: name,
port: port,
host: host,
extras: event.service.attributes,
),
);
break;
default:
print('Another event occurred : $event.');
break;
}
});
await discovery.start();
await Future.delayed(timeout);
await discovery.stop();
return results.toSet().toList();
}