首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >颤振MQTT -发布到topic1并收听topic2

颤振MQTT -发布到topic1并收听topic2
EN

Stack Overflow用户
提问于 2022-08-28 14:00:06
回答 1查看 45关注 0票数 3

我有一个发布到“topic1”的颤振应用程序,目前正在收听“topic1”。

代码语言:javascript
运行
复制
   MQTTManager(
        {required String host,
        required String topic,
        required String identifier,
        required MQTTAppState state})
        :
          _identifier = 'id',
          _host = '48.238.196.188',
          _topic = 'topic1',
          _currentState = state;

我想发布到“topic1”,然后收听“topic2”的回复

这在客户端中可能吗?

代码语言:javascript
运行
复制
 void onConnected() {
      _currentState.setAppConnectionState(MQTTAppConnectionState.connected);
      print('EXAMPLE::Mosquitto client connected....');
      _client!.subscribe(_topic, MqttQos.atLeastOnce);
      _client!.updates!.listen((List<MqttReceivedMessage<MqttMessage?>>? c) {
        // ignore: avoid_as
        final MqttPublishMessage recMess = c![0].payload as MqttPublishMessage;

        // final MqttPublishMessage recMess = c![0].payload;
        final String pt =
            MqttPublishPayload.bytesToStringAsString(recMess.payload.message!);
        _currentState.setReceivedText(pt);
        print(
            'EXAMPLE::Change notification:: topic is <${c[0].topic}>, payload is <-- $pt -->');
        print('');
      });
      print(
          'EXAMPLE::OnConnected client callback - Client connection was sucessful');
    }
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-28 21:02:17

发布字符串

代码语言:javascript
运行
复制
    void publish(String message) {
      final MqttClientPayloadBuilder builder = MqttClientPayloadBuilder();
      builder.addString(message);
      _client!.publishMessage(_topic1, MqttQos.exactlyOnce, builder.payload!);
    }

订阅字符串

代码语言:javascript
运行
复制
_client!.subscribe(_topic2, MqttQos.atLeastOnce);

你可以看到这两个不同的主题。

代码语言:javascript
运行
复制
  import 'package:mqtt_client/mqtt_client.dart';
  import 'package:flutter_mqtt/mqtt/state/mqtt_app_state.dart';
  import 'package:mqtt_client/mqtt_server_client.dart';

  class MQTTManager {
    // Private instance of client
    final MQTTAppState _currentState;
    MqttServerClient? _client;
    final String _identifier;
    final String _host;
    final String _topic1;
    final String _topic2;

    // Constructor
    // ignore: sort_constructors_first
    MQTTManager(
        {required String host,
        required String topic,
        required String identifier,
        required MQTTAppState state})
        : //_identifier = identifier,
          _identifier = 'id',
          //_host = host,
          _host = '48.238.196.188',
          //_topic = topic,
          _topic1 = 'topic1',
          _topic2 = 'topic2',
          _currentState = state;

    void initializeMQTTClient() {
      _client = MqttServerClient(_host, _identifier);
      //_client = MqttServerClient('140.238.96.88', 'Where');
      _client!.port = 1883;
      _client!.keepAlivePeriod = 20;
      _client!.onDisconnected = onDisconnected;
      _client!.secure = false;
      _client!.logging(on: true);

      /// Add the successful connection callback
      _client!.onConnected = onConnected;
      _client!.onSubscribed = onSubscribed;

      final MqttConnectMessage connMess = MqttConnectMessage()
          .withClientIdentifier(_identifier)
          .withWillTopic(
              'willtopic') // If you set this you must set a will message
          .withWillMessage('My Will message')
          .startClean() // Non persistent session for testing
          .withWillQos(MqttQos.atLeastOnce);
      print('EXAMPLE::Mosquitto client connecting....');
      _client!.connectionMessage = connMess;
    }

    // Connect to the host
    // ignore: avoid_void_async
    void connect() async {
      assert(_client != null);
      try {
        print('EXAMPLE::Mosquitto start client connecting....');
        _currentState.setAppConnectionState(MQTTAppConnectionState.connecting);
        await _client!.connect();
      } on Exception catch (e) {
        print('EXAMPLE::client exception - $e');
        disconnect();
      }
    }

    void disconnect() {
      print('Disconnected');
      _client!.disconnect();
    }

    void publish(String message) {
      final MqttClientPayloadBuilder builder = MqttClientPayloadBuilder();
      builder.addString(message);
      _client!.publishMessage(_topic1, MqttQos.exactlyOnce, builder.payload!);
    }

    /// The subscribed callback
    void onSubscribed(String topic) {
      print('EXAMPLE::Subscription confirmed for topic $topic');
    }

    /// The unsolicited disconnect callback
    void onDisconnected() {
      print('EXAMPLE::OnDisconnected client callback - Client disconnection');
      if (_client!.connectionStatus!.returnCode ==
          MqttConnectReturnCode.noneSpecified) {
        print('EXAMPLE::OnDisconnected callback is solicited, this is correct');
      }
      _currentState.setAppConnectionState(MQTTAppConnectionState.disconnected);
    }

    /// The successful connect callback
    void onConnected() {
      _currentState.setAppConnectionState(MQTTAppConnectionState.connected);
      print('EXAMPLE::Mosquitto client connected....');
      _client!.subscribe(_topic2, MqttQos.atLeastOnce);
      _client!.updates!.listen((List<MqttReceivedMessage<MqttMessage?>>? c) {
        // ignore: avoid_as
        final MqttPublishMessage recMess = c![0].payload as MqttPublishMessage;

        // final MqttPublishMessage recMess = c![0].payload;
        final String pt =
            MqttPublishPayload.bytesToStringAsString(recMess.payload.message!);
        _currentState.setReceivedText(pt);
        print(
            'EXAMPLE::Change notification:: topic is <${c[0].topic}>, payload is <-- $pt -->');
        print('');
      });
      print(
          'EXAMPLE::OnConnected client callback - Client connection was sucessful');
    }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73519318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档