Skip to main content

event_bus_arch_mqtt 0.1.0 copy "event_bus_arch_mqtt: ^0.1.0" to clipboard
event_bus_arch_mqtt: ^0.1.0 copied to clipboard

MQTT 5 transport for event_bus_arch.

example/event_bus_arch_mqtt_example.dart

import 'dart:async';
import 'dart:convert';
import 'dart:typed_data';

import 'package:event_bus_arch/event_bus_arch.dart';
import 'package:event_bus_arch_mqtt/event_bus_arch_mqtt.dart';

///A two-bus MQTT 5 demo. Start a broker first, for example:
///
///```text
///mosquitto -p 1883
///```
///
///Then run:
///
///```text
///dart run example/event_bus_arch_mqtt_example.dart
///```
Future<void> main() async {
  final broker = Uri.parse('mqtt://localhost:1883');

  final publisher = EventBusMqtt(
    broker,
    serializers: {
      'int.sensor.temp': (dto) =>
          (null, Uint8List.fromList(utf8.encode('${dto.data}'))),
      'int.sensor.double': (dto) =>
          (null, Uint8List.fromList(utf8.encode('${dto.data}'))),
    },
    deserializers: {
      // A remote request needs a deserializer for the response.
      'int.sensor.double': (data, topic, {arguments}) => EventDTO<int>(
        int.parse(utf8.decode(data)),
        topic: Topic.parse(topic),
        arguments: arguments,
      ),
    },
  );

  final subscriber = EventBusMqtt(
    broker,
    serializers: {
      'int.sensor.double': (dto) =>
          (null, Uint8List.fromList(utf8.encode('${dto.data}'))),
    },
    deserializers: {
      'int.sensor.*': (data, topic, {arguments}) => EventDTO<int>(
        int.parse(utf8.decode(data)),
        topic: Topic.parse(topic),
        arguments: arguments,
      ),
    },
  );

  await Future.wait([
    publisher.waitConnected(timeout: const Duration(seconds: 5)),
    subscriber.waitConnected(timeout: const Duration(seconds: 5)),
  ]);

  subscriber.setHandler<int>(
    paths: ['sensor', 'double'],
    handler: (dto, lastData) async => dto.data * 2,
  );

  final received = <int>[];
  final subscription = subscriber
      .listen<int>(paths: ['sensor', '*'])
      .listen(received.add);

  publisher.fire<int>(21, paths: ['sensor', 'temp']);
  await Future<void>.delayed(const Duration(milliseconds: 500));

  final doubled = await publisher.request<int>(
    21,
    paths: ['sensor', 'double'],
    timeout: const Duration(seconds: 5),
  );

  print('events received: $received');
  print('request response: $doubled');

  await subscription.cancel();
  await publisher.dispose();
  await subscriber.dispose();
}
0
likes
150
points
71
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

MQTT 5 transport for event_bus_arch.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

event_bus_arch, event_bus_arch_transport, mqtt5_client, typed_data

More

Packages that depend on event_bus_arch_mqtt