Содержание

Внешняя компонента 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С:Предприятие

Поддерживаемые WebSocket-серверы

Внешняя компонента работает с любыми 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С

На стороне сервера 1С недоступен механизм внешних событий. Соответственно, асинхронные оповещения о состоянии соединения сервер получить не cможет.

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

По умолчанию, значение параметра Таймаут = 0. При организации соединения на стороне сервера, необходимо задать значение параметра, например, Таймаут=5. Это позволит серверу дождаться окончания процесса установки соединения. Если, соединение завершится раньше, чем таймаут, тогда метод вернет результат раньше.

&НаСервере
Процедура ПодключитьсяНаСервере()
 
     WS=Новый("AddIn.Simplit.ROM-WebSocket");
     WS.РежимПрослушивания=Ложь;
     WS.Таймаут=5;
     СоединениеУстановлено=WS.Подключиться(URI);
     Если СоединениеУстановлено Тогда
          WS.Отправить("Привет мир!");
          WS.Отключиться();
     КонецЕсли; 
 
КонецПроцедуры