discover method

Stream<List<BloomDiscoveredServer>> discover({
  1. RawDatagramSocket? customSocket,
})

Starts listening for UDP broadcast announcements and returns a stream of discovered servers.

Implementation

Stream<List<BloomDiscoveredServer>> discover({RawDatagramSocket? customSocket}) {
  _controller = StreamController<List<BloomDiscoveredServer>>.broadcast(
    onCancel: stop,
  );

  if (customSocket != null) {
    _listenToSocket(customSocket);
  } else {
    try {
      RawDatagramSocket.bind(InternetAddress.anyIPv4, udpPort, reuseAddress: true, reusePort: true)
          .then((socket) {
        _socket = socket;
        _socket?.broadcastEnabled = true;
        _listenToSocket(socket);
      }).catchError((e) {
        logger.warn('BloomDevServerDiscovery: Failed to bind UDP port $udpPort: $e');
      });
    } catch (e) {
      logger.warn('BloomDevServerDiscovery: UDP binding exception: $e');
    }
  }

  return _controller!.stream;
}