bonsoir 7.1.1 copy "bonsoir: ^7.1.1" to clipboard
bonsoir: ^7.1.1 copied to clipboard

A Zeroconf library that allows you to discover network services and to broadcast your own. Based on Apple Bonjour and Android NSD.

Bonsoir is a Zeroconf library that allows you to discover network services and to broadcast your own. It's based on Android NSD and on Apple's popular framework Bonjour. In fact, Bonsoir can be translated into Good evening (and Bonjour into Good morning or Good afternoon depending on the current moment of the day).

Pub Likes Pub Monthly Downloads Pub Points Maintained with Melos

Preview #

Bonsoir preview

Installation #

See how to install on the Bonsoir website.

Code snippet #

Here is how you can broadcast your service using Bonsoir :

// Let's create our service !
BonsoirService service = BonsoirService(
  name: 'My wonderful service', // Put your service name here.
  type: '_wonderful-service._tcp', // Put your service type here. Syntax : _ServiceType._TransportProtocolName. (see http://wiki.ros.org/zeroconf/Tutorials/Understanding%20Zeroconf%20Service%20Types).
  port: 3030, // Put your service port here.
);

// And now we can broadcast it :
BonsoirBroadcast broadcast = BonsoirBroadcast(service: service);
await broadcast.initialize();
await broadcast.start();

// ...

// Then if you want to stop the broadcast :
await broadcast.stop();

And here is how you can search for a broadcasted service :

// This is the type of service we're looking for :
String type = '_wonderful-service._tcp';

// Once defined, we can start the discovery :
BonsoirDiscovery discovery = BonsoirDiscovery(type: type);
await discovery.initialize();

// If you want to listen to the discovery :
discovery.eventStream!.listen((event) { // `eventStream` is not null as the discovery instance is "ready" !
  switch (event) {
    case BonsoirDiscoveryServiceFoundEvent():
      print('Service found : ${event.service.toJson()}');
      event.service!.resolve(discovery.serviceResolver); // Should be called when the user wants to connect to this service.
      break;
    case BonsoirDiscoveryServiceResolvedEvent():
      print('Service resolved : ${event.service.toJson()}');
      break;
    case BonsoirDiscoveryServiceUpdatedEvent():
      print('Service updated : ${event.service.toJson()}');
      break;
    case BonsoirDiscoveryServiceLostEvent():
      print('Service lost : ${event.service.toJson()}');
      break;
    default:
      print('Another event occurred : $event.');
      break;
  }
});

// Start the discovery **after** listening to discovery events :
await discovery.start();

// Timeout :
await Future<void>.delayed(Duration(seconds: 5));

// Then if you want to stop the discovery :
await discovery.stop();

If you want a full example, don't hesitate to check this one on Github.

Note

When a discovered service is resolved, BonsoirService.hostAddresses contains the network addresses exposed by the platform, while BonsoirService.hostname contains the mDNS/SRV target hostname when the platform provides one. You can check whether the current platform can populate this hostname field by checking the BonsoirDiscovery.supportsMdnsHostname property. This does not guarantee that the operating system can resolve .local hostnames natively for HTTP requests or sockets; use hostAddresses when you need already-resolved network addresses.

Contributions #

You have a lot of options to contribute to this project ! You can :

152
likes
160
points
35.3k
downloads
screenshot

Documentation

API reference

Publisher

verified publisherskyost.eu

Weekly Downloads

A Zeroconf library that allows you to discover network services and to broadcast your own. Based on Apple Bonjour and Android NSD.

Homepage
Repository (GitHub)
View/report issues
Contributing

Funding

Consider supporting this project:

ko-fi.com
paypal.me

License

MIT (license)

Dependencies

bonsoir_android, bonsoir_darwin, bonsoir_linux, bonsoir_platform_interface, bonsoir_windows, flutter

More

Packages that depend on bonsoir

Packages that implement bonsoir