Xamarin.Forms MQTT Опубликовать после нажатия кнопки - PullRequest
0 голосов
/ 19 сентября 2018

Я работал над небольшим кусочком кода в Xamarin Forms (Visual Studio - мой первый проект) для отправки mqtt-сообщения после нажатия кнопки.Я написал код для публикации сообщения mqtt на сервере test.mosquitto.org в консольном приложении C #, и он отлично работает

using System;
using System.Net.Mqtt;
using System.Text;

namespace MqttTest.Client
{
class Program
{
const string topic = "test/test/button";

    static void Main (string[] args)
    {
        var config = new MqttConfiguration { Port = 1883 };
        var client = MqttClient.CreateAsync("test.mosquitto.org", config).Result;
        var clientId = "myClientID";
        string message = "test";


        client.ConnectAsync (new MqttClientCredentials (clientId)).Wait ();
        client.SubscribeAsync (topic, MqttQualityOfService.AtLeastOnce).Wait ();
        //Publishes "message" Var 
        client.PublishAsync(new MqttApplicationMessage(topic, Encoding.UTF8.GetBytes($"{message}")), MqttQualityOfService.AtLeastOnce).Wait();
    }
}

}

Теперь я написал очень простое кроссплатформенное приложение xamarin с 1 кнопкой, 1событие button_clicked и код события clicked кнопки, которое было записано в вышеуказанном консольном приложении.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using System.Net.Mqtt;

namespace App1
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
const string topic = "test/test/button";

    private void Button_Clicked(object sender, EventArgs e)
    {
        var config = new MqttConfiguration { Port = 1883 };
        var client = MqttClient.CreateAsync("test.mosquitto.org", config).Result;
        var clientId = "clientIdhGHvpYY9uM";
        string message = "Hello";


        client.ConnectAsync(new MqttClientCredentials(clientId)).Wait();
        client.SubscribeAsync(topic, MqttQualityOfService.AtLeastOnce).Wait();
        client.PublishAsync(new MqttApplicationMessage(topic, Encoding.UTF8.GetBytes($"{message}")), MqttQualityOfService.AtLeastOnce).Wait();
    }
}

}

После тестирования приложения в эмуляторе оно загружается нормально, но когда я нажимаю кнопку, оно зависает (Я не могу повторно нажать на кнопку) приложение и не публикует его на тестовом mqtt-сервере.

Может кто-нибудь предложить какой-либо совет, как это работает

спасибо

...