Ниже приведен полный код:
Код: Выделить всё
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Server;
using System;
using System.Threading.Tasks;
namespace ClassMQTTTest
{
public class ClassMQTT
{
private string broker;
private int brokerPort;
private string topic;
private string clientId = Guid.NewGuid().ToString();
private MqttFactory factory;
private MQTTnet.Client.MqttClient mqttClient;
private MQTTnet.Client.MqttClientOptions conexOptions;
private MQTTnet.Client.MqttClientConnectResult connectToMQTT;
public string topicValue;
//Constructor
public ClassMQTT(string broker, int brokerPort, string topic)
{
this.broker = broker;
this.brokerPort = brokerPort;
this.topic = topic;
factory = new MqttFactory();
mqttClient = (MQTTnet.Client.MqttClient)factory.CreateMqttClient();
conexOptions = new MqttClientOptionsBuilder()
.WithTcpServer(this.broker, this.brokerPort)
.WithCredentials("", "")
.WithClientId(clientId)
.WithCleanSession()
.Build();
}
private async Task procConnectToMQTT()
{
connectToMQTT = await mqttClient.ConnectAsync(this.conexOptions);
}
private bool isConnectedToMQTT()
{
return (connectToMQTT.ResultCode == MqttClientConnectResultCode.Success);
}
public async Task getTopicValue()
{
await procConnectToMQTT();
if (isConnectedToMQTT())
{
await mqttClient.SubscribeAsync(topic);
//Callback function when anything is publish on the topic
mqttClient.ApplicationMessageReceivedAsync += e =>
{
topicValue = e.ApplicationMessage.ConvertPayloadToString();
return Task.CompletedTask;
};
}
}
}
}
Код: Выделить всё
private async void button1_Click(object sender, EventArgs e)
{
ClassMQTTTest testMQTT = new ClassMQTTTest("xxxxxx", 000000, "topicTest");
await testMQTT.getTopicValue();
string vTopic = testMQTT.topicValue;
MessageBox.Show(vTopic);
}
подписки на тему.
Назначение для "string vTopic = testMQTT.topicValue;" возвращает NULL !!!
Как получить назначение vTopic в getTopicValue()???
Заранее спасибо
Подробнее здесь: https://stackoverflow.com/questions/790 ... rect-value
Мобильная версия