Кнопка Xamarin MQTT onClick не может подключиться к серверу - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь реализовать решение здесь: 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();
        }
    }
}
...