AllJoyn и Windows 10 — делаем так, чтобы наши устройства говорили на одном языке

Дата публикации: 26.08.2015


Одна из главных проблем, волнующих многих, это вопрос обеспечения связности и обнаружения устройств, говорящих на разных языках, протоколах и др. Эту проблему призван решить фреймворк AllJoyn, в совокупности с протоколом Thread, к рабочей группе над которым Microsoft присоединился 1 июля. Об AllJoyn и пойдёт наша речь.

Отдельно мы решили рассмотреть одну из очень важных частей этой концепции в разрезе Windows 10 (но, конечно, не ограничивающейся этой ОС) — популярный протокол взаимодействия устройств AllJoyn, который уже стал де-факто стандартом. Тем более, что Windows 10 и сопутствующий Windows 10 SDK предоставляют специальную поддержку данного протокола.

Что за AllJoyn?


AllJoyn — это фреймворк (и протокол) с открытым исходным кодом, предназначенный для взаимодействия приложений, устройств и пользователей через WiFi и Bluetooth (и другие типы сетей) вне зависимости от типа устройства.

Основной заслугой данного протокола является специальный уровень абстракции, позволяющий устройствам и приложениям предлагать себя в качестве провайдера определенных услуг и находить другие устройства и приложения без использования какого-либо дополнительного оборудования и специальных серверов.

Архитектурно это выглядит следующим образом – AllJoyn-сеть состоит из виртуальных роутеров (Routers) и приложений (Apps). Приложения общаются со своим роутером, а роутеры, в свою очередь, с другими роутерами и другими приложениям, относящимися к данному роутеру. Таким образом, приложения могут общаться друг с другом посредством сети этих виртуальных роутеров. При этом приложение и виртуальный роутер, к которому он прикреплен, могут находится на разных физических устройствах.

Подробнее про архитектуру AllJoyn можно почитать тут (общая информация) и тут (Windows 10 IoT).



Windows 10 IoT AllJoyn

Спешу порадовать — в Windows 10 включена полная поддержка данного протокола, а именно:

Во-первых, вам не нужно заботиться об AllJoyn-роутере, описанном выше, так как Windows 10 включает специальный сервис AllJoyn Router Service, который может использоваться как вашими приложениями, так и другими устройствами в сети.

Во-вторых, Windows 10 включает специальный API для работы с AllJoyn-протоколом, который находится в пространстве имен Windows.Devices.AllJoyn (https://msdn.microsoft.com/en-us/library/windows/apps/windows.devices.alljoyn.aspx) (поддерживаются С++, C#, JavaScript). Таким образом, вам не нужно ставить дополнительные SDK и инструменты, все уже готово и работает.

И, конечно же, дополнительные инструменты для разработчиков:

  • AllJoynCodeGen — часть Windows 10 SDK (лежит в C:\Program Files (x86)\Windows Kits\10\bin\x64\), позволяет сгенерировать полностью готовую Windows Runtime библиотеку для работы с AllJoyn-сервисом, используя описание сервиса в формате xml (AllJoyn Introspection XML). Посмотреть и послушать подробнее.
  • getajxml — специальная утилита, которая позволяет обнаружить все AllJoyn-устройства в сети, получить детальную информацию, в том числе сгенерировать AllJoyn Introspection XML, который можно использовать для автогенерации кода. Подробнее можно посмотреть на видео выше.
  • AllJoyn Explorer — похожая утилита, выполненная в виде Windows приложения и позволяющая не только увидеть интерфейс, но и динамически вызвать методы. Скачать можно здесь.

 

Пример создания AllJoyn-приложения на Windows 10

Ниже мы будем использовать Windows 10 Insider Preview и бесплатную версию Visual Studio 2015 Community Edition (RC) (скачать).

Одним из популярных примеров AllJoyn является проект Connected Lighting Project, который представляет ни что иное, как лампочку, реализующую AllJoyn-интерфейс для получения информации и управления устройством.

Ниже посмотрим на процесс создания Windows 10-клиета для управления такой умной лампочкой.

Полный исходный код приложения можно найти на GitHub. Итак…

Шаг 1. Создаем новый Widows Runtime C++ компонент и используем AllJoynCodeGen (см. выше) для автогенерации кода. Публичный AllJoyn Introspection XML для данного проекта можно найти тут.

Детальные инструкции лежат здесь.

Шаг 2. Создаем новое Windows 10 C#/XAML приложение и добавляем в зависимости только что созданный Windows Runtime компонент.

Шаг 3. Теперь мы можем реализовать логику по нахождению и управлению нашей лампочкой

Для того, чтобы найти и подсоединиться к лампочке:

Чтобы изменить яркость:

Это действительно весь код :) Основные AllJoyn классы были предоставлены Windows 10 API, остальные сгенерированы c помощью AllJoynCodeGen.

Шаг 4. Тестируем:

В качестве тестовой лампочки можно использовать Lamp Simulator Application (Android, скачать). Итак, запускаем наше приложение на Windows Phone 10 телефоне и Lamp Simulator на Android, и смотрим, как это все работает вместе.


Автор статьи: Гребнов Сергей

Данный материал написан участником сообщества. В статье представлено мнение автора, которое может не совпадать с мнением корпорации Microsoft. Microsoft не несет ответственности за проблемы в работе аппаратного или программного обеспечения, которые могли возникнуть после использования материалов данной статьи.