shachneff / BROM-Asterisk-Native

Открытая, работающая в 1С >= 8.3.6 версия компоненты ROM-Asterisk-Native от Simplit
38 stars 35 forks source link

В 1С поступают не все события #15

Closed yakutyan closed 4 years ago

yakutyan commented 4 years ago

Добрый день коллеги! Использую данную компоненту для интеграции с АТС Астериск. Возникла проблема при получении некоторых событий, до 1С они тупо не доходят, например в 1С не приходит событие "DialEnd" со статусом BUSY когда звонишь занятому абоненту. При отладки компоненты было выявлено что при отправке таких событий ExternalEvent(wsName, msg, Data) возвращает false, с чем это может быть связано?

yakutyan commented 4 years ago

Нашел на ИТС методичку по разработке внешних компонент в ней есть описание метода ExternalEvent

Синтаксис:

bool ExternalEvent(WCHAR_T* wsSource, WCHAR_T* wsMessage, WCHAR_T* wsData)

Параметры:

<wsSource> Тип: WCHAR_T*. Строка с наименованием источника события.
<wsMessage> Тип: WCHAR_T*. Строка с наименованием события.
<wsData> Тип: WCHAR_T*. Строка c параметрами события.
Возвращаемое значение:

true – событие помещено в очередь
false – очередь переполнена, обработка событий недоступна или неизвестная ошибка
Описание:

Помещает событие в очередь, записывая источник события, наименование и параметры события. При обработке события эти данные передаются процедуре ОбработкаВнешнегоСобытия. При вызове метода ExternalEvent дальнейшая обработка события происходит следующим образом: событие записывается в очередь событий (если очередь полностью занята, событие теряется), затем при отсутствии системных событий из очереди берется первое событие (если очередь не пуста) и запускается процесс обработки внешних событий. Этот процесс повторяется для всех объектов внешних компонент. Таким образом, обработка внешних событий синхронизируется с обработкой системных событий.

Написано что если очередь полностью занята, то событие теряется, почему так происходит именно при звонке занятому абоненту? что делать? голову уже сломал

yakutyan commented 4 years ago

Решил данную проблему тем что увеличил количество времени сна перед отправкой в 1С, т.к. в очереди может быть только одно событие, тем самым 1С успевает обработать и очистить очередь событий и готова для получения следующего.