Я пытаюсь реализовать решение здесь: https://github.com/xamarin/xamarin-iot-samples/blob/master/Hermes.Mqtt/MqttTest.Client/Program.cs
Я создал приложение с кнопкой, которая должна инициировать подключение сервера MQTT. Однако он просто зависает и даже не выводит первый «Console.Writeline ()», который я вставил, чтобы помочь отладить его.
Отладка, похоже, go не так в "var client = MqttClient.CreateAsyn c (" iot.eclipse.org ", config) .Result;"
Последняя сообщение на экране отладки:
04-15 16: 06: 31.270 D / Mono (28888): сборка Ref addref System. Net .Mqtt [0xa7574e40] -> System.Reactive [0xa75751a0]: 3
Я действительно изо всех сил пытался найти хорошие источники / примеры того, как реализовать MQTT в Xamarin. Формы для начинающих, любая помощь будет высоко оценена.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using Xamarin.Forms;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Net;
using System.Net.Mqtt;
using System.Threading;
using Android.Widget;
namespace Tuber_App {
public partial class MainPage : ContentPage
{
const int loopDelayTime = 250;
const string topic = "test/#";
const string exitMessage = "exit";
public MainPage()
{
InitializeComponent();
}
public void SummonButton_Clicked(object sender, EventArgs e)
{
//Create and Connect an MQTT client with default options
bool isFinishing = false;
var config = new MqttConfiguration { Port = 1883 };
var client = MqttClient.CreateAsync("iot.eclipse.org", config).Result;
var clientId = "XamarinClient";
var received = "";
Console.WriteLine("MQTT config done, client id set");
client.ConnectAsync(new MqttClientCredentials(clientId)).Wait();
Console.WriteLine("connected");
client.SubscribeAsync(topic, MqttQualityOfService.AtLeastOnce).Wait();
Console.WriteLine("subscribed to topic");
client.MessageStream.Subscribe(message => {
if (isFinishing)
return;
var data = Encoding.UTF8.GetString(message.Payload).Split(new string[] { ":" }, StringSplitOptions.None);
Console.WriteLine($"Message Received from {data[0]}:{data[1]}");
PublishAsync(client, clientId, exitMessage);
//Send exit to server
received = data[1];
if (received == exitMessage)
isFinishing = true;
});
Console.WriteLine($"Client connected successfully to {client.Id}:{config.Port}");
Console.WriteLine($"Awaiting messages...");
PublishAsync(client, clientId, "Connected.");
while (received != exitMessage)
{
Thread.Sleep(loopDelayTime);
}
Console.WriteLine("Shutting down... Received exit command.");
}
}
static void PublishAsync(IMqttClient client, string clientId, string message)
{
Console.WriteLine($"Sending message: {message}");
client.PublishAsync(new MqttApplicationMessage(topic, Encoding.UTF8.GetBytes($"{clientId}:{message}")), MqttQualityOfService.AtLeastOnce).Wait();
}
}
}