Библиотека входит в 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, согласно международной конвенции о защите авторских прав
Внешняя компонента работает с любыми WebSocket-серверами, которые поддерживают спецификацию WebSocket (RFC 6455). Единственное требование - это соответствие спецификации протокола.
Нами были успешно протестированы:
Windows XP / Windows Server 2003 не поддерживаются
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С недоступен механизм внешних событий. Соответственно, асинхронные оповещения о состоянии соединения сервер получить не cможет.
Для обеспечения работы на стороне сервера, ROM-WebSocket предоставляет возможность выполнения некоторых команд в синхронном режиме с помощью параметра Таймаут.
По умолчанию, значение параметра Таймаут = 0. При организации соединения на стороне сервера, необходимо задать значение параметра, например, Таймаут=5. Это позволит серверу дождаться окончания процесса установки соединения. Если, соединение завершится раньше, чем таймаут, тогда метод вернет результат раньше.
&НаСервере Процедура ПодключитьсяНаСервере() WS=Новый("AddIn.Simplit.ROM-WebSocket"); WS.РежимПрослушивания=Ложь; WS.Таймаут=5; СоединениеУстановлено=WS.Подключиться(URI); Если СоединениеУстановлено Тогда WS.Отправить("Привет мир!"); WS.Отключиться(); КонецЕсли; КонецПроцедуры