Windows IoT — MQTT Brocker Background App

Небольшая заметка о брокере MQTT с простой авторизацией (имя\пароль) на Raspberri Pi 2 и Windows IoT. Примера для этого нет ни на официальном сайте GnatMQ, ни в репозитории github, потому приведу, чтобы было. Может кому понадобится… ;)

Итак. Вы создали свой проект приложения, которое будет выполнятся в фоне (background app), далее разберем, как создать брокер для MQTT буквально в несколько шагов. Вначале заходим в NuGet Package Manager для нашего решения (solution):

b20-1

Далее ищем в онлайн вкладке необходимую библиотеку — GnatMQ:

b20-2

Справа выбираем, для какого конкретно проекта в решении нужно поставить эту библиотеку и выбираем последнюю стабильную версию библиотеки — v1.1.0:

b20-3

Жмакаем Install. Внизу в Outputs будет лог установки, должно пройти всё без проблем, в противном случае читаем, что пошло не так, и исправляем…
Проверяем проект, в References должна появится ссылка библиотеку GnatMQ:

b20-4

Вот и всё с подготовлениями! Теперь осталось написать немного кода…

Во-первых, для того чтобы наше приложение работало в фоне постоянно после инициализации брокера и не завершалось, необходимо создать экземпляр BackgroundTaskDeferral. Тогда после выполнения инициализирующей функции Run приложение не завершится и все асинхронные таски будут выполнятся. Более подробно это описано в мануале Developing Background Applications. В программе это будет выглядеть так:

using System;
using Windows.ApplicationModel.Background;

namespace MQTTBroker
{
public sealed class StartupTask : IBackgroundTask
{
private BackgroundTaskDeferral deferral;

public void Run(IBackgroundTaskInstance taskInstance)
{
deferral = taskInstance.GetDeferral();
}
}
}

После запуска такого приложения оно ничего делать не будет (ведь в функции Run мы ничего и не написали то… :) ), но и не завершится после выполнения (запуска).

Во-вторых, нужно создать метод для делегата, отвечающего за задание параметров авторизации Имя\Пароль.

MqttUserAuthenticationDelegate userauth = new MqttUserAuthenticationDelegate(CheckAuthParams);

static bool CheckAuthParams(string user, string pass)
{
return !(String.IsNullOrEmpty(user) & String.IsNullOrEmpty(pass));
}

В итоге Имя\Пароль для подключения к брокеру назначаются следующим образом:

const string mqtt_brokerUser = "user";
const string mqtt_brokerPass = "pass";
public void Run(IBackgroundTaskInstance taskInstance)
{
userauth(mqtt_brokerUser, mqtt_brokerPass);
broker.UserAuth = userauth;
}

Вот и всё! Собираем эти две части вместе и получаем простой брокер на C#, UWP с авторизацией Имя\Пароль. У вас должно получиться нечто подобное (весь код приложения):

using System;
using Windows.ApplicationModel.Background;
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Managers;

namespace MQTTBroker
{
public sealed class StartupTask : IBackgroundTask
{
const string mqtt_brokerUser = "user";
const string mqtt_brokerPass = "pass";

private BackgroundTaskDeferral deferral;
MqttBroker broker = new MqttBroker();
MqttUserAuthenticationDelegate userauth = new MqttUserAuthenticationDelegate(CheckAuthParams);

static bool CheckAuthParams(string user, string pass)
{
return !(String.IsNullOrEmpty(user) & String.IsNullOrEmpty(pass));
}

public void Run(IBackgroundTaskInstance taskInstance)
{
deferral = taskInstance.GetDeferral();

userauth(mqtt_brokerUser, mqtt_brokerPass);
broker.UserAuth = userauth;
broker.Start();
}
}
}

Удачного кодинга! ;)

Реклама

Рубрики: C#, Windows IoT

Tagged as: , , , , , ,

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s