суббота, 28 августа 2010 г.

Часть 3: Система удаленного управления приложениями персонального компьютера с помощью мобильных устройств

1 Сервисы

Как уже говорилось выше, классы, реализующие сетевой сервис, должны имплементировать интерфейс RPCMNetworkService и реализовывать все его методы:
Initialize – инициализация сервиса до его запуску. Позволяет сервису показать диалоговое окно настройки параметров данного сервиса, а так же дать возможность сервису инициализировать внутренние параметры;
Start – запуск сервиса сервером;
Stop – остановка работы сервиса сервером;
GetName – получение имени сервиса для отображения его, например, в списке клиентов.
Также клиент должен реализовывать событие ClientConnected, возвращая в обработчик реализацию абстрактного класса Client.
Именование должно происходить следующим образом. Пространство имен сервиса должно называть RPCMNetworkServiceNamespace, а класс сервиса RPCMNetworkServiceInstance.
Так же в библиотеку сервиса должна входить реализация абстрактного класса Cient, возвращаемого в качестве аргумента, обработчику события сервиса ClientConnected. Объект этого класса является логической связью с подключившимся клиентом.
Реализация Client должна определять следующие методы:
SendData – позволяет послать данному клиенту массив байт;
CloseConnection – вызывается при желании сервера завершить соединение с клиентом, а так же при недоступности клиента, для освобождения занятых ресурсов;
GetService – получение ссылки на сервис, создавший клиента;
GetDescription – получение некоторого описания клиента (например, IP адрес в Wi-Fi / LAN сервисе)
Так же клиент должен реализовывать событие DataBytesReceived, возникающее при получении данных от подключенного клиента.

1.1 Wi-Fi / LAN

Реализация данного сервиса состоит из двух файлов LANService и LANClient являющихся реализациями соответствующих интерфейса и абстрактного класса. Работа с Wi – Fi осуществляется с помощью сокетов (socket) и асинхронных операций работы с ними. После запуска, сервис находится в постоянном ожидании подключения. Когда клиентское приложение подключается, сервер вызывает соответствующее событие, передавая в качестве аргумента объект класса LANClient, хранящий в себе соответствующий сокет соединения с клиентом и позволяющий отправлять и принимать данные от клиента.

1.2 Bluetooth

Данный сервис в настоящее время находится в разработке.

2 Реализация плагинов

Как говорилось выше, для реализации плагина, необходимо создать реализацию абстрактного класса RPCMPlugin, находящегося в rpcmsdk.dll. Он содержит следующие абстрактные методы:
GetGUID – возвращает строку из 32 симоволов (латиница), являющуюся уникальным идентификатором плагина. Для простоты и большой вероятности уникальности идентификатора лучше воспользоваться стандартными средствами генерации GUID в Visual Studio (меню "Tools" -> Create GUID, затем убрать все разделители).
GetName – возвращает строку, содержащую краткое имя плагина;
GetDescription – возвращает строку, содержащую описание возможностей и смысла команд плагина, а также его версию;
GetAbout – возвращает строку, содержащую информацию о разработчиках;
GetCommandsList – возвращает массив строк, являющихся одновременно и именами и передаваемыми идентификаторами команд;
DataReceivedHandler – обработчик получения данных со стороны сервера (через связку клиент – сервер – плагин). В качестве аргументов получает объекты типа Client, описывающий клиента, пославшего данные, и RPCMData, содержащий логическое представление посланных данных.
Также абстрактный класс содержит событие DataReceivedRequired и функцию вызова данного события OnDataSendRequired, с помощью которой плагин может посылать данные обратно клиенту. На данный момент реализована возможность посылки текстовых данных, например результата последней операции.
Как было сказано выше, класс и пространство имен должно иметь строгое именование. Реализация класса плагина должна называться RPCMPluginInstance и находиться в пространстве имен RPCMPluginNamespace.

2.1 WinampControl плагин

Данный плагин позволяет управлять некоторыми возможностями музыкального и видео проигрывателя WinAMP. Среди возможностей реализованных в плагине:
Ø Переключение на следующую и предыдущую песни
Ø Начать проигрывание
Ø Пауза и продолжение проигрывания
Ø Остановка проигрывания
Ø Увеличение и уменьшение громкости
Ø Перемотка текущей песни назад и вперед с интервалом 5 секунд
Данный плагин состоит из одного значимого файла WinampPlugin.h, также файла, предоставляемого разработчиками WinAMP для сторонних разработчиков и работы с проигрывателем wa_ipc.h.
Для отправки команды WinAMP, необходимо найти главное окно зарегистрированного приложения, затем, с помощью оконных сообщений отправить необходимые команды.
Результатом, отправляемым клиенту, является строка с указанием того, что желаемое действие было произведено.

2.2 Shutdown плагин

Данный плагин позволяет пользователю управлять различными режимами завершения работы компьютера, такими как:
Ø Выключение компьютера
Ø Перезагрузка компьютера
Ø Завершение сеанса пользователя
Ø Переход в спящий режим (если разрешено в настройках системы)
Проект плагина состоит из одного значимого файла – ShutdownPlugin.h, который является реализацией абстрактного класса RPCMPlugin и имеет соответсвующее именование и реализацию необходимых функций, основанных на стандартной функции WinAPI ExitWindowsEx. Следует заметить, что при завершении работы используется флаг, указывающий на закрытие программ в любом случае, даже если в них были не сохраненные изменения и они требуют подтверждения выхода.


3 Отладочная программа Wi-Fi/LAN сервиса

Для того чтобы проверить работоспособность сервера и сервиса Wi-Fi/LAN необходимо написать отладочную программу - клиента, выступающую, в роли, например, абстрактного мобильного устройства.
clip_image002
Рисунок 1. Отладочная программа – клиент

На рисунке выше приведено главное и единственное окно отладочной программы-клиента. Нет смысла вдаваться в подробности реализации данного приложения на уровне классов и их связи, так как оно не является частью разрабатываемой системы, было сделано только для личного использования и для того, чтобы показать пример работы системы, не имея реальных устройств.
Для того чтобы начать работу с приложением, необходимо предварительно запустить сервер. По умолчанию Wi-Fi/LAN сервис запускается на 55555 порту. Далее в поле отладочного приложения вводим IP адрес компьютера, на котором запущен сервер. На рисунке поле для адреса заполнено "127.0.0.1", это означает, что сервер запущен на той же машине, что и клиент. При указании такого адреса подключение к сети или наличие сетевой карты не обязательно. После ввода сетевого адреса и порта необходимо нажать кнопку "Connect" для соединения с сервером. После соединения (отдельного индикатора в окне программы нет, можно посмотреть на самом сервере), появляется возможность отправить серверу сообщение.
Главное окно приложения разбито на две части – первая, представляет пользователю формат сообщения (в данной реализации), то есть пользователь (разработчик) может представить, в каком виде данные передаются серверу. Все поля, кроме Data и Type закрыты для редактирования, потому что GUID определяется из полученных описаний плагинов, а длина данных из того, насколько заполнено текстовое поле, соответствующее данным. Так же пользователю предоставляется возможность произвольно заполнять поле Data и выбирать тип посылаемого сообщения. Для того чтобы получить список доступных плагинов необходимо, после подключения к серверу, выбрать тип сообщения PluginsDescriptionRequired и нажать кнопку Send (отправка). После этого заполняется вторая область окна.
Вторая область предназначена для работы с плагинами и представляет, как бы, виртуальный экран мобильного устройства. После получения информации о плагинах, заполняется выпадающий список с именами. При выборе имени в выпадающем списке, справа, в раскрытом списке, появляются доступные для конкретного плагина команды. А под списком плагинов появляется описание плагина. Если сделать двойной щелчок по команде плагина, то все поля сообщения заполнятся соответствующим образом и, если установлен флаг "Direct Send", сразу будут отправлены серверу.
Если плагин возвращает какую-то информацию (в текущей реализации – текстовую), то она появляется в окне результата. Примером плагина, возвращающего текстовую информацию, является WinampControl плагин.
Разработано данное приложение, с применением библиотеки rpmsdk.dll, использование функций и классов которой во многом упрощает процесс разработки.
Описанное выше приложение позволяет проверить функционирование сервиса Wi-Fi\LAN и корректность передачи данных, а так же корректную работу сервера, обработку сообщений и отправку информации о плагинах, передачу данных самими плагинами. Так же, данное приложение является наглядным пособием разработчику, позволяющим показать работу системы и часть ее внутреннего устройства, такого как формат передачи данных.


4 Заключение

В данное время, беспроводные технологии, такие как Wi-Fi и Bluetooth все больше входят в нашу жизнь, позволяя связывать всю, окружающую человека электронику, в одну логическую сеть, начиная с мобильного телефона и заканчивая фотоаппаратом, предоставляя несчетное число различных возможностей. Одна из них – управление приложениями на компьютере с помощью мобильных устройств, используя в качестве среды передачи данных перечисленные выше технологии. Однако, приложения, являющие собой решения данной задачи, весьма ограничены функционально из-за недостаточной расширяемости и поддержки малого количества платформ мобильных устройств. Целью данной работы было проектирование системы, лишенной перечисленных выше недостатков и реализация: серверной части, Wi-Fi\LAN сервиса и плагинов управления проигрывателем WinAMP и завершения работы компьютера. Платформой для разработки серверной части была выбрана распространенная на данный момент и перспективная платформа Microsoft .NET Framework, предоставляющая разработчику большие возможности.
В результате данной работы была спроектирована и реализована система, абстрагированная от среды передачи данных и модульная, позволяющая разработчикам создавать собственные расширения, покрывая недостающую функциональность и обеспечивая поддержку новых приложений, а так же позволяя разрабатывать модули работы с появляющимися новыми или редкими средами передачи данных. Работоспособность системы была проверена, найденные недостатки устранены.
Так же, в рамках данной работы, было разработано тестовое приложение, демонстрирующее работу системы и являющееся в какой-то мере, обучающим, показывающим формат сообщений, которыми обмениваются сервер и клиент.
В дальнейшем, планируется добавление новой функциональности, такой, как обмен сервера и клиента сообщениями в формате XML, реализация Bluetooth сервиса, возможность возврата плагином не только текстовой информации, но и информации других типов, например, изображений, реализация "обратного сообщения", то есть управление мобильным устройством, например КПК, с помощью компьютера.

Комментариев нет:

Отправить комментарий