Внешняя компонента ROM-WebSocket
Библиотека входит в SDK прежде всего для возможности интеграции с новым интерфейсом Asterisk - ARI (Asterisk RESTfull Interface), который доступен в версиях Asterisk 12, 13.
В то же время, библиотека является универсальной и может использоваться для любых других задач, с участием WebSocket
ROM-WebSocket - внешняя компонента 1С:Предприятие 8.x, реализована по технологии Native API, в соответствии с рекомендациями 1С, изложенными в руководстве «Технология создания внешних компонент». Библиотека написана на языке C++.
ROM-Websocket реализует функциональность WebSocket-клиента для 1С. Реализация WebSocket-клиента выполнена в соответствии с RFC 6455.
Описание протокола WebSocket
Сайт, посвященный WebSocket (поддерживает тестовый эхо-сервер на WebSocket)
ROM-WebSocket поддерживает URI схему ws: (нешифрованное соединение), определенную спецификацией протокола
ROM-WebSocket работает в асинхронном режиме - результаты выполнения методов будут возвращены как внешнее событие 1С.
Текущая версия
1.0.2 (stable)
Авторские права
Авторские права принадлежат Simplit, согласно международной конвенции о защите авторских прав
Поддерживаемые версии 1С:Предприятие
- 1С:Предприятие 8.1
- 1С:Предприятие 8.2 обычное приложение
- 1С:Предприятие 8.2, 8.3 управляемое приложение:
- сервер,
- толстый клиент,
- тонкий клиент,
Поддерживаемые WebSocket-серверы
Внешняя компонента работает с любыми WebSocket-серверами, которые поддерживают спецификацию WebSocket (RFC 6455). Единственное требование - это соответствие спецификации протокола.
Нами были успешно протестированы:
- Slack (сервис командного взаимодействия)
- Pusher (интернет вещей, интеграция приложений)
- Pushbullet (сервис обмена сообщениями между различными устройствами и ОС)
Поддерживаемые ОС
- Windows Server 2012
- Windows Server 2008
- Windows 10
- Windows 8
- Windows 7
- Windows Vista
Windows XP / Windows Server 2003 не поддерживаются
Свойства и методы
Свойства
- Подключено / Connected – (чтение), (булево), флаг состояния подключения к серверу
- Таймаут / Timeout – (чтение/запись), (число), таймаут в секундах при подключении к серверу
- РежимПрослушивания / Listen – (чтение/запись), (булево), вкл/выкл режим получения внешних событий
- Версия / Version – (чтение), (строка), версия внешней компоненты
- РегулярноеВыражение / Regex – (чтение/запись), (строка), фильтр на базе регулярного выражения PCRE
Методы
- Подключиться / Connect (URI) - установить соединение с WebSocket-сервером
- Отключиться / Disconnect() - разорвать соединение с WebSocket-сервером
- Отправить / Send(<СтрокаСообщения>) - отправить произвольное сообщение серверу
События
ROM-WebSocket работает в асинхронном режиме - результаты выполнения методов возвращаются как внешние события 1С в обработчик ВнешнееСобытие(Источник,Событие,Данные)
Параметр Событие
содержит информацию о событии в структурированном виде - в формате JSON.
Процедура ВнешнееСобытие(Источник, Событие, Данные) Сообщить(Событие); Сообщить(Данные); КонецПроцедуры
При подключении к серверу:
Параметр Событие содержит пакет {«Event»: «Connection»,«State»: «Open»}
,
параметр Данные содержит пакет {«Connection»: «Open»}
Вывод:
{"Event": "Connection","State": "Open"} {"Connection": "Open"}
При отключении от сервера:
{"Event": "Connection","State": "Close","Reason": "Normal"} {"Connection": "Close"}
«Reason»: «Normal» - соединение завершено по инициативе клиента
«Reason»: «Drop» - сторона сервера сбросила соединение
При ошибке установки соединения:
{"Event": "Connection","State": "Fail"} {"Connection": "Fail"}
При получении сообщения от сервера:
Параметр Событие содержит пакет {«Event»: «Message»}
,
параметр Данные содержит текст сообщения
{"Event": "Message"} Hello world!
Подключение внешней компоненты
Толстый клиент, сервер, внешнее соединение
//Пример подключения внешней компоненты из общего макета АдресВнешнейКомпоненты="ОбщийМакет.ROMWebsocketZIP"; Результат=ПодключитьВнешнююКомпоненту(АдресВнешнейКомпоненты,"Simplit",ТипВнешнейКомпоненты.Native); Если Результат Тогда WebSocket = Новый ("AddIn.Simplit.ROM-WebSocket"); КонецЕсли;
Тонкий клиент, веб-клиент
УстановитьВнешнююКомпоненту(<Местоположение>); ПодключитьВнешнююКомпоненту(<Местоположение>, <Имя>, <Тип>) ;
//Пример подключения внешней компоненты из ZIP-архива, хранящегося в общем макете АдресВнешнейКомпоненты="ОбщийМакет.ROMWebsocketZIP"; Результат=ПодключитьВнешнююКомпоненту(АдресВнешнейКомпоненты,"Simplit",ТипВнешнейКомпоненты.Native); Если Не Результат Тогда УстановитьВнешнююКомпоненту(АдресВнешнейКомпоненты); Результат=ПодключитьВнешнююКомпоненту(АдресВнешнейКомпоненты,"Simplit",ТипВнешнейКомпоненты.Native); КонецЕсли; Если Результат Тогда WebSocket = Новый ("AddIn.Simplit.ROM-WebSocket"); КонецЕсли;
Выполнение на стороне сервера 1С
На стороне сервера 1С недоступен механизм внешних событий. Соответственно, асинхронные оповещения о состоянии соединения сервер получить не cможет.
Для обеспечения работы на стороне сервера, ROM-WebSocket предоставляет возможность выполнения некоторых команд в синхронном режиме с помощью параметра Таймаут.
По умолчанию, значение параметра Таймаут = 0. При организации соединения на стороне сервера, необходимо задать значение параметра, например, Таймаут=5. Это позволит серверу дождаться окончания процесса установки соединения. Если, соединение завершится раньше, чем таймаут, тогда метод вернет результат раньше.
&НаСервере Процедура ПодключитьсяНаСервере() WS=Новый("AddIn.Simplit.ROM-WebSocket"); WS.РежимПрослушивания=Ложь; WS.Таймаут=5; СоединениеУстановлено=WS.Подключиться(URI); Если СоединениеУстановлено Тогда WS.Отправить("Привет мир!"); WS.Отключиться(); КонецЕсли; КонецПроцедуры