Вторник, 24.12.2024, 17:04

Support

Благодарность принимается на web money: Z338510577725
Категории раздела
VVSAst [3]
Форма входа

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Меню сайта
Поиск
Главная » FAQ » VVSAst [ Добавить вопрос ]

VVSAst [3]

Для подключения к серверу Астериск используйте метод Соединить(IP,Port)

Если подключение прошло успешно, то можно вызвать метод ПолучитьКоманду(Сек,МилиСек,Стр)

Если Вы подключились к серверу Астериск, то в параметре Стр вернется строка вида: "Asterisk Call Manager/1.1"

Теперь можно логинится к серверу. Для этого отправьте команду методом : 

ПослатьКоманду(Стр)
Где стр - строка вида:
"Action: login
Username: ИмяПользователя
Secret: ПарольПользователя

"
Не забывайте в конце добавить двойной перевод строки (РазделительСтрок+РазделительСтрок), как этого требует сервер Астериск.

После отправки команды Вы можете получить ответ с сервера методом ПолучитьКоманду(Сек,МилиСек,Стр). Или методом НачатьСлушать(СтрРазделитель) направить ответы сервера в обработчик внешнего события.

ВАЖНО!!! Используйте Events: off
"Action: login
Username: ИмяПользователя
Secret: ПарольПользователя
Events: off

"
если Вы не собираетесь обрабатывать ответы от сервера Астериск. Иначе ответы будут валиться вам в порт.

Ответил: Валерий Васильев
Добавил: Константин Ившин

В версии 8.x применяются строки unicode. Это может вызвать некоторые проблемы при передаче команды серверу астериск. Причина в разном разделителе строк.  Если в ANCII разделитель строк состоит из двух символов (с кодами #13#10), то в юникоде перевод строки обозначается одним символом (с кодом #10). Напишем и сравним простой код для 7.7 и 8.x . 

7.7
Стр="1
|2";// Текст с переводом строки
 
Длина=СтрДлина(Стр);
Сообщить("Длина:"+Длина);//Сообщаем длину строки.
 
Для Н=1 по Длина цикл
            Код=КодСимв(сред(Стр,н,1));
            Сообщить(""+н+":"+Код);//Выводим код каждого символа.
КонецЦикла;
 
Результат:
Длина:4
1:49
2:13
3:10
4:50

8.х
Стр="1
|2";// Текст с переводом строки
 
Длина=СтрДлина(Стр);
Сообщить("Длина:"+Длина);//Сообщаем длину строки.
 
Для Н=1 по Длина цикл 
            Код=КодСимвола(сред(Стр,н,1)); 
            Сообщить(""+н+":"+Код);//Выводим код каждого символа.
КонецЦикла;
 
Результат:
Длина:3
1:49
2:10
3:50

Как видите, в 8.х перевод строки один символ, что может не восприниматься астериском (в зависимости от  версии Астериска). Тоже самое с двойным переводом, которым должна заканчиваться команда астериску. Как выход можно явно указывать перевод строк нужными символами. Например так:
 
КонецСтр=Символы.ВК+Символы.ПС;
Команда="Строка 1"+ КонецСтр +"Строка 2"+ КонецСтр + КонецСтр;


После прохождения фильтра (см. метод ДобавитьФильтр) события попадают в буфер. 1С последовательно выбирает события из буфера и обрабатывает их в обработчике внешних событий. Если событий приходит больше, чем 1С успевает их обрабатывать - буфер переполняется и новые события не принимаются. 

Чтоб решить эту проблему можно:
- Установить точный фильтр, чтоб отсечь не нужные события еще до попадания в буфер (метод ДобавитьФильтр).
- Установить достаточный размер буфера. Свойство РазмерБуфераСобытий (доступно c версии 1.2.17).