Closed SimolSem closed 4 years ago
Ищи в пулл реквест
Свой архив с длл и манифестом поместить в общий макет?
Проблема решена, собирать библиотеку нужно в Microsoft Visual Studio 2015, в 2010 и в 2017 правильно собрать не получалось. Хотя при компиляции никаких ошибок не выдавалось.
Рано радовался, под Windows 10 работает, а под Windows Server 2012 R2 - нет, подскажите как собрать по Server 2012r2?
Напишите в почту 1с@innova-it.org. Можем обсудить некоторые детали.
Доброго дня! А получилось что то с Windows Server 2012 R2 ? Как то не хочет она у меня подключаться =\
А получилось что то с Windows Server 2012 R2 ?
Под Windows Server 2016 / 1C 8.3.9.x b 8.3.6.x работает: https://github.com/azubar/BROM-Asterisk-Native-1C/blob/master/bin/BROM-Asterisk-Native.dll
Спасибо!
У меня сейчас 8.3.10.2252
Пробую типа такого:
Попытка ПутьКДЛЛ = "\\...имя сервера.\1C_Base\VK\BROM-Asterisk-Native_github.dll"; Результат = ПодключитьВнешнююКомпоненту(ПутьКДЛЛ, "Test", ТипВнешнейКомпоненты.Native); Сообщить("Результат - "+Результат+" {"+ПутьКДЛЛ+"}"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки;
говорит Результат - нет =\
Я компоненту пихаю в макет "BROM_Asterisk_Native_1C" и подключаю ее следующим образом:
` РезПодключение = Ложь;
Если НЕ ЗначениеЗаполнено(ХЭШ_Компонент) Тогда
СсылкаНаАрхив = ПоместитьВоВременноеХранилище(ЭтотОбъект.ПолучитьМакет("BROM_Asterisk_Native_1C"), Новый УникальныйИдентификатор);
Если ПодключитьВнешнююКомпоненту(СсылкаНаАрхив, "Asterisk", ТипВнешнейКомпоненты.Native) Тогда
Попытка
Компонент = Новый ("AddIn.Asterisk.ROM-Asterisk-Native");
РезПодключение = Истина;
ХЭШ_Компонент = Компонент;
Исключение
Компонент = Неопределено;
Сообщить("Исключение при инициализации компоненты AddIn.Asterisk.ROM-Asterisk-Native, проверьте установлена ли система защиты.");
КонецПопытки;
КонецЕсли;
Иначе
Компонент = ХЭШ_Компонент;
РезПодключение = Истина;
КонецЕсли;
`
Сделал все также...
У меня вот тут
Если ПодключитьВнешнююКомпоненту(СсылкаНаАрхив, "Asterisk", ТипВнешнейКомпоненты.Native) Тогда
ложь.
А какой студией делал DLL ?
Кто не силен в с++ просто откройте проект в студии прям на нужном сервере, она сама подтянет нужные зависимости и установит в винде
Попробовал в 2015 студии собрать прямо на сервере - не помогло =( Подключил отладку в студии, но не могу понять как посмотреть на чем именно валится =(
"1cv8.exe" (Win32). Загружено "C:\Users\1CAdmin2\Desktop\BROM-Asterisk-1C-master\Debug\BROM-Asterisk-Native.dll". Символы загружены. "1cv8.exe" (Win32). Выгружено "C:\Users\1CAdmin2\Desktop\BROM-Asterisk-1C-master\Debug\BROM-Asterisk-Native.dll" Вызвано исключение по адресу 0x00007FFB58FB95FC в 1cv8.exe: исключение Microsoft C++: core::ContextException по адресу памяти 0x000000000013D460.
Может кто подскажет, как это дело правильно дебажить, что бы понимать где ошибка?
А еще, в свойствах проекта есть пункты "Версия целевой платформы" и "Набор инструментов..."
Грусть тоска берет, явно какая то мелкая ошибка - а не понять где =\
На всякий случай если кто будет читать. У меня проблема была с клиентом 64bit - помогло немного подправить код и пере собрать под 64. Плюс описание вот отсюда - https://stackoverflow.com/questions/35805113/visual-studio-2015-run-time-dependencies-or-how-to-get-rid-of-universal-crt
На всякий случай если кто будет читать. У меня проблема была с клиентом 64bit - помогло немного подправить код и пере собрать под 64. Плюс описание вот отсюда - https://stackoverflow.com/questions/35805113/visual-studio-2015-run-time-dependencies-or-how-to-get-rid-of-universal-crt
А сюда выложить?
Сюда не выкладывал - я в с++ не силен , и у меня там остались ошибки в коде которые студия подсвечивает, после компиляции под 64 - еще правлю. В общих чертах - DLL подключилась и события слушает Я пока точно не уверен будет ли толком работать дальше =)
По ответу на SO - без вот смены вот этих параметров: For Debug: from /MDd to /MTd For Release: from /MD to /MT dll собранная под 64 не подключалась.
Подключилась и слушает события - это уже победа! Останется только проверить на ошибки выделения памяти, утечки... Если не сильны в C++ и в git, можете прислать мне ссылку на Ваш локальный проект x64, я добавлю сюда и оформлю отдельные ветки под разную разрядность.
Доброго дня. Поделитесь пожалуйста последней dll и примером использования.
@zadevil Ссылки на последнюю DLL и исходники указаны выше, если интересует х64 версия, то надо всего навсего открыть проект в MSVS2015, вот тут https://docs.microsoft.com/en-us/cpp/build/how-to-configure-visual-cpp-projects-to-target-64-bit-platforms написано как добавить целевую платформу, здесь https://stackoverflow.com/questions/35805113/visual-studio-2015-run-time-dependencies-or-how-to-get-rid-of-universal-crt как установить свойства проекта, что бы не ставить на конечную машину вот это "Download The Microsoft Visual C++ 2010 Redistributable" http://www.microsoft.com/en-gb/download/details.aspx?id=14632, компилируем и радуемся жизни.
Пример использования есть в исходниках, выше писали как и что работает...
p.s. @shachneff, @korv1982 - спасибо за исходники и ссылочки, избавили от лишней работы, на счет утечек - я временно "забил" на варнинги несоответствия типов при компиляции х64 версии, но работает без перерыва неделю, слушает сообщения, посылает команды - полет нормальный, позже надо будет в профайлере прогнать...
Добрый день. Подскажите платформа 8.2.15 Какую dll нужно использовать? у меня есть такая: https://cloud.mail.ru/public/L6Xu/S2nusL7Tx но она никак не регится. В 1С при запуске Панели телефонии пишет: Не удалось подключить загрузить компоненту для связи с Asterisk Не создать объект внешней компоненты для связи с Asterisk.{ВнешняяОбработка.ПанельТелефонии.МодульОбъекта(26)}: Тип не определен (AddIn.ROM-Asterisk)
Может кто подсказать этапы как все правильно настроить или сказать что не так?
32-х разрядная тут уже есть, добавлю от себя х64. Скомпилированная х64 версия в приложенном макете вместе с manifest. Проверена на 8.3.11.3034, winserver 2008 r2.
Добрый день. 32-х разрядная компонента работает некоторое время, затем перестает вызывать внешние события 1С, хотя компонента возвращает Телефония.Подключено=истина. Помогите понять в чем может быть проблема
PotapX, 1 - в это время коннект по AMI к Астериску есть? (в CLI Asterisk команда manager show connected) 2 - в примере обработки для 1с есть закомменченный код - процедура ВнешнееСобытие, в самом начале проверка на “подписку” на события и переподписка в случае отваливания проверьте ее...
вообще, по своему опыту - работает с ноября 2017 круглые сутки - отваливания происходят крайне редко, и то из за багов в сети, может быть раз в месяц. По наблюдениям - если очень часто слать события между ДЛЛ и 1с - могут теряться некоторые сообщения, хотя по логике работы там буфер довольно большой и теряться не должно, все события от АТС тебе явно не нужны - поставь фильтр на самое нужное - мне, для регистрации звонков и их промежуточных статусов надо всего 6 событий - newChannel, dialEnd, bridgeEnter, hangup, transfer, originate - все остальное шлак по сути
Да, тем более на свежих версиях Астериска более продвинутые фильтры событий при настройке AMI, можно меньше мусора слать в 1С.
Уточните так же версию платформы - на 8.3.13 заметил нестабильную работу с другой внешней компонентой, возможно, 1С что-то у себя поменяли или сломали )
Racefeeder,
И настройку AMI нужно посмотреть. За телефонию у нас отвечает отдельный человек, попробуем с ним настройть необходимые фильтры со стороны астериска.
Если не сложно можете прислать саму dll. Может я не ту использую. И пример кода 1с установки фильтров и регулярных выражений.
shachneff, До перехода на 8.3.10, раньше была 8.3.5, все работало отлично. Сейчас одни проблемы.
PotapX, куда слать?
1с была так же 8.3.9.1850, потом обновили до 8.3.10.хххх, но видимых глюков не наблюдается - как раньше, так и сейчас наблюдается иногда или запаздывание или пропажа событий, но редкое 1 на 100...
Запаздывания могут быть по двум причинам. 1) Буфер 1С переполнен. (Не используются внутренние фильтра компоненты, медленный компьютер) 2) Пропажа или задержка пакетов по UDP (Ну тут раздолье полное, от включен дебаг на астере до хреновая сеть, петля, в сети куча всего гуляет в т.ч. видео. По моей практике даже на ADSL держит достаточно хорошо когда астер в датацентре а клиенты в филиале за не очень стабильным проводом. При этом их 20 человек.
И настройку AMI нужно посмотреть. За телефонию у нас отвечает отдельный человек, попробуем с ним настройть необходимые фильтры со стороны
Там с двух сторон надо резать. Командой из 1С в астер по евентам и регуляркой в компоненте. Пример: УстановитьРегулярноеВыражение("BridgeEnter([^.])Channel: ([^.])PJSIP/4104|BridgeLeave([^.])Channel: ([^.])PJSIP/4104|MIXMONITOR_FILENAME|Disconnected")
. По наблюдениям - если очень часто слать события между ДЛЛ и 1с - могут теряться некоторые > сообщения, хотя по логике работы там буфер довольно большой и теряться не должно
Есть такое, буфер пробовал менять, но похоже 1С забила на эту функцию и установила в константу, пробовал выкидывать в консоль, там проблемы с потерей нет. Это на стороне 1С, больше 1к сообщений в сек и все стает колом.
Racefeeder, a11mir@yandex.ru
Буфер тоже пробовали менять видимого результата нет. Пробовал даже отключаться от телефонии и заново подключаться, когда в 1С закрывают событие звонок, чтобы во время разговора не приходили сообщения (после длительного простоя компонента перестает реагировать). Хотел даже сделать обработчик ожидания, чтобы проверять есть ли подключение с телефонии, но всегда возвращает что подключено хотя компонента не реагирует на звонки.
Кстати у нас сделано так, что все пользователи к телефонии подключаются по одному логину и паролю, разница только в регулярном выражении (по событию и номеру телефона). На 8.3.5 работало без проблем.
я (после длительного простоя компонента перестает реагировать).
Полагаю что есть косяк с полученными данными. Может кто лучше посмотрит этот кусок кода
if (recived > 0) {} else{И вот тут идет проверка на ошибки сокета. Но есть подозрение, что конект уже упал, а в Received лежит число. *И Received наверное надо бы обнулить.*
PotapX, чтоб не было простоя, можно подписаться на какое нибудь “левое” событие, которое прилетает раз в Н-минут, например, что нибудь из разряда регистрация пиров или типа того, что Астер сам изредка делает сам... ДЛЛки отправил.
korv1982,
Вот в этом месте надо делать костыль, БОЛЬШОЙ БОЛЬШОЙ.
Racefeeder пишет что у него работает уже пол года без проблем. понять бы как у него это получилось
Сейчас на 8.3.10.2252 никаких проблем не наблюдается.
Единственное, что вот это:
Кстати у нас сделано так, что все пользователи к телефонии подключаются по одному логину и паролю, разница только в регулярном выражении (по событию и номеру телефона). На 8.3.5 работало без проблем.
у нас не так, сделаны логины под каждый телефон, и события режутся со стороны астериска только по нужному номеру. Ну и плюс фильтры на сами события - только нужное нам.
Не пробовали переключать ListenMode (режим прослушивания или как оно там) туда/обратно?
Добрый день.В dll от Racefeeder наблюдалась такая же картина, компонента зависала и не реагировала. Для решения данной проблемы сделал следующее:
3-4 дня жалоб от пользователей нет.
Большое Всем спасибо!!!
сделайте там таймаут на слушание сокета и проблем не будет
а в самом астере есть косяк - он тоже не ловит обрыва связи и тупо думает что все ОК, сам не смотрел в код - но похоже так и есть - срубаешь ДЛЛ и он не видит этого
сделайте там таймаут на слушание сокета и проблем не будет
Можете прокомментировать более подробно? Где" там"? Не понятно
Здрасьте!
Я может быть и не прав, что после недолгого просмотра исходников сразу решил написать вам, но вдруг вам не сложно ответить? С++ я вижу впервые, так что прошу понять и простить (но я разберусь со временем).
Спасибо!
Тут же исходники, можете поудалять все что не нужно и собрать компоненту. По хорошему, просто руки не доходят почистить тут все от мусора (ключи, демы).
Под Линукс не работает, надо делать, нет реальных знаний и потребностей, одна теория
1) Вы можете собрать компоненту с Демо режимом. В одном месте заменив условие. Это было сделано чтобы заказчику продавать поддержку по количеству рабочих мест. А код я чистить не стал. 2) Под Linux работать не будет. НО если сервер на Linux , а клиенты на Windows то все будет работать.
Друзья, скажите пожалуйста, не удалось скомпилить исправленную dll-ку, если есть возможность, выложите пожалуйста. Заранее, добра вам)
BROM-Asterisk-Native.zip DLL с выключенным демо режимом, x86
BROM-Asterisk-Native.zip DLL с выключенным демо режимом, x86
Так я ее давно вычистил, что поменялось?
Так я ее давно вычистил, что поменялось?
Да? В той, что я скачал, демо было включено. Скачал исходники и убрал условие. Демо было как-то по-другому выключено? Я вообще не рублю в С, первый раз в глаза видел :)
Демо было как-то по-другому выключено? Я вообще не рублю в С, первый раз в глаза видел :)
- if(_wcsicmp(valid_key, key) == 0) { isDemo = false; } else { isDemo = true; } +if(_wcsicmp(valid_key, key) == 0) { isDemo = false; } else { isDemo = false; } Почему то думал что удалил все что касаемо демо. Оказывается сделал это локально. Вот ссылка на вычищенный релиз. Сразу извиняюсь @shachneff мержить нет времени. Может кто -то возьмется. Исправлены некоторые проблемы с сокетами. Обновлена основа в соответствии с рекомендациями 1С.
https://github.com/korv1982/InnovaIT-Asterisk-Native/releases/tag/1.0.0.20
Отлично, спасибо! Будем этим пользоваться.
Демо было как-то по-другому выключено? Я вообще не рублю в С, первый раз в глаза видел :)
- if(_wcsicmp(valid_key, key) == 0) { isDemo = false; } else { isDemo = true; } +if(_wcsicmp(valid_key, key) == 0) { isDemo = false; } else { isDemo = false; } Почему то думал что удалил все что касаемо демо. Оказывается сделал это локально. Вот ссылка на вычищенный релиз. Сразу извиняюсь @shachneff мержить нет времени. Может кто -то возьмется. Исправлены некоторые проблемы с сокетами. Обновлена основа в соответствии с рекомендациями 1С.
https://github.com/korv1982/InnovaIT-Asterisk-Native/releases/tag/1.0.0.20
Спасибо! Сделаю мерж на выходных
Спасибо! Сделаю мерж на выходных
Брать из DEV ветки
не срабатывает событие "DialEnd" при исходящем звонке занятому абоненту. Что делать, нужно отслеживать занятость абонента при исходящем звонке?
не срабатывает событие "DialEnd" при исходящем звонке занятому абоненту. Что делать, нужно отслеживать занятость абонента при исходящем звонке?
А дллка тут при чем? :)... с этим вам к астероводам надо...
не срабатывает событие "DialEnd" при исходящем звонке занятому абоненту. Что делать, нужно отслеживать занятость абонента при исходящем звонке?
А дллка тут при чем? :)... с этим вам к астероводам надо...
С компонентой от платного продукта это событие приходит, получается что нужно доработать dll не пока не могу разобраться как именно)
Добрый день! А можно попросить положить и скомпилированную DLL? Попросил товарища скомпилировать (он и писал предыдущее ижью про заголовки) он скомпилил, кодировка не 1251 в dll и свойства с методами - крякозяблы. А при вызове методов латинской 1С возвращает ошибку при вызове метода "Подключиться" причем написано кракозяблами, хотя я вызывал "Connect". Получается dll сопоставило Connect=Подключиться но что-то скомпилилось не так и не работает. (старая dll на 8.2 рабтает с этим экземпляром астериска)