Я пытаюсь подписаться от брокера mqtt с помощью приложения C # - PullRequest
0 голосов
/ 21 июня 2019

Здравствуйте, я опубликовал сообщение от клиента Paho брокеру MQTT и хочу подписаться на это сообщение, используя эту тему; Моя проблема, когда отладчик приходит на линию client.MqttMsgPublishReceived + = client_MqttMsgPublishReceived; это не выполнение метода и переход к следующей строке.

Я использую hive mqtt broker и c # Form Application с добавленными библиотеками M2MQTT.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Forms;

// including the M2Mqtt Library
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;

private void button1_Click(object sender, EventArgs e)
{
  MqttClient client = new MqttClient("192.168.43.51");
  client.ProtocolVersion = MqttProtocolVersion.Version_3_1;
  byte code = client.Connect(Guid.NewGuid().ToString());
  ushort msgIds = client.Subscribe(new string[] { @"Factory1\Sensor1" },
                    new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });
  textBox1.Text = "";
  client.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
}
void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
  this.Invoke((MethodInvoker)delegate ()
  {
    textBox1.Text += "Received = " + Encoding.UTF8.GetString(e.Message) + " 
    on topic " + e.Topic + "\r\n";
  });
}

Я хочу получить опубликованное сообщение в текстовом поле. вы, люди, помогите мне, пожалуйста. Спасибо.

1 Ответ

0 голосов
/ 24 июня 2019

моя проблема в том, когда отладчик приходит на линию client.MqttMsgPublishReceived + = client_MqttMsgPublishReceived; это не выполнение метода и переход к следующей строке.

Эта строка не должна выполнять метод, так как она только подключает обработчик событий. Вместо этого код в обработчике событий client_MqttMsgPublishReceived будет вызываться, когда класс MqttClient вызывает событие MqttMsgPublishReceived (при получении сообщения MQTT).

Это можно увидеть, добавив точку останова к функции client_MqttMsgPublishReceived и опубликовав сообщение в теме Factory1\Sensor1. Вы можете использовать отдельный клиент MQTT для публикации этого сообщения. (Обратите внимание, что разделитель тем MQTT - это косая черта '/', поэтому вам нужно будет опубликовать тему с обратной косой чертой.)

См. https://docs.microsoft.com/en-us/dotnet/standard/events/#event-handlers, чтобы узнать, как подписаться на события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...