Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

switch case (условие): - в астериске возможно?

0
switch(${arg1})
  {
  case (${arg1}=0):
      ...
      ...
  default:
      ...
  };

В Си такое сделать можно, а вот в астериске у меня пока кроме преобразования ${arg1} во что либо, ничего не получается, а мне нужно сравнить.

удалить закрыть спам изменить тег редактировать

спросил 2012-04-11 09:08:21 +0400

Sevruga Gravatar Sevruga
109 6 1 10

обновил 2012-04-11 09:10:31 +0400

Comments

Вот точно такое делается case 0. Если сравнение нужно -- заведи дополнительную переменную.

tesak89 ( 2012-04-11 09:32:43 +0400 )редактировать

3 Ответа

0

в астриске в диалплане вообще ничего похожего нет.

в луа можно.

ссылка удалить спам редактировать

ответил 2012-04-11 09:35:33 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Comments

а как же switch в ael? http://www.voip-info.org/wiki/view/Asterisk+AEL как раз оно самое.

Злобный Мыш ( 2012-04-11 09:46:55 +0400 )редактировать

Имелся в виду conf, я думаю

tesak89 ( 2012-04-11 10:42:31 +0400 )редактировать

конечно. ael и lua это уже модули расширения вобщемто. и чем учить странный язык аел, лучше выучить луа. он хоть гдето может пригодится.

meral ( 2012-04-11 11:01:12 +0400 )редактировать

Имеется в виду AEL. switch в AEL. Неужели никто не сталкивался? У меня получилось в "case" добавить проверку на длину переменной ( case ${LEN(${arg1})}: ) , а вот сравнение не могу.

И кстати у меня всё на AEL прекрасно работает.

Sevruga ( 2012-04-11 17:33:02 +0400 )редактировать

потомучто нельзя просто не прочитать ничего и писать дилплан.как минмум надо прочитат extensions.conf и asteriskvariables. делается вот так $[ ${arg1} > 335 ]

meral ( 2012-04-12 08:14:05 +0400 )редактировать

НЕ работает. Читал я variables. Спасибо за попытку...

Sevruga ( 2012-04-12 09:26:04 +0400 )редактировать

ну. в скобки возьмите. или почитайте как выражения считаются в аел. я моуг сказть как это делается в диалплане. аел как глючную приблуду я не использую. перехожу сразу с диалплана на fastagi и модели с++ к астериску.

meral ( 2012-04-12 11:25:52 +0400 )редактировать

ваш fastagi ещё большая "приблуда" и ещё вопрос что менее глючно, удобно и безопасно.

Sevruga ( 2012-04-13 10:18:02 +0400 )редактировать

fastagi более безопасно. у него нет шансов повесить ядро сервера.

meral ( 2012-04-13 11:49:57 +0400 )редактировать
0

Проверяйте с помощью GotoIf(), и прыгайте по диалплану куда надо. А если в AEL, то ваше условие будет примерно таким:

switch(${arg1})
  {
  case 0:
      App1();
      ...;
  default:
      App2();
      ...
  };

Сравнение в If:

if(${arg1}>335) {
        App1();
}
else {
        App2();
}
ссылка удалить спам редактировать

ответил 2012-04-11 10:53:27 +0400

ro Gravatar ro flag of Russian Federation
404 1 1 11
http://rootblog.ru/

обновил 2012-04-12 14:09:22 +0400

Comments

Я для примера - не удачное сравнение... надо было case (${arg1} > 335): При "gotoif" боюсь потеряю в биллинге "src" или "dst" номер.

Sevruga ( 2012-04-11 17:43:30 +0400 )редактировать

Ничего вы не потеряете при gotoif, используйте его.

По поводу сравнения в case... а разве вообще так можно?

ro ( 2012-04-11 20:32:46 +0400 )редактировать

можно.надо вот так делать $[ ${arg1} > 335 ]

meral ( 2012-04-12 08:12:45 +0400 )редактировать

НЕ работает. Читал я variables. Спасибо за попытку...

Sevruga ( 2012-04-12 09:32:16 +0400 )редактировать

Повторюсь. Используйте Gotoif и If в AEL. см. Отредактированный ответ.

ro ( 2012-04-12 14:10:11 +0400 )редактировать

ну что вы зациклились на этом gotoif. Я же не спроста switch использую, у меня и pattern-ы есть. И прыгать мне из контекста не нужно, и меток я делать в контексте не хочу. И не уверен я в gtoif потому что с gotoiftime у меня были проблемы. Пришлось переделать на iftime и goto. Коме этого я не уверен с потерей номеров и контекстов, помню что с goto у меня какие-то проблемы были. Goto после себя мало информации в биллинге оставляет.

Sevruga ( 2012-04-13 09:57:53 +0400 )редактировать

Посмотрите в ответе, где там прыжок из контекста? Где там вообще как таковой goto?

ro ( 2012-04-13 11:03:58 +0400 )редактировать

ну так в чем проблема? добавляйте ручками информацию в билинг. астриск поддерживает люые доп записи в cdr.

meral ( 2012-04-13 11:50:53 +0400 )редактировать
0

Кто мещает agi на c написать?

ссылка удалить спам редактировать

ответил 2012-04-11 10:42:45 +0400

tesak89 Gravatar tesak89 flag of Russian Federation
422 25 3 16

Comments

не надо. только вот закончил такой ужас переписывать.

meral ( 2012-04-11 11:00:35 +0400 )редактировать

Вообще тяжко? =)

tesak89 ( 2012-04-11 13:12:59 +0400 )редактировать

Зачем AGI, когда можно использовать встроенные средства?

AGI очень уменьшает производительность системы, поэтому всегда, когда это возможно, лучше обходиться без него.

ro ( 2012-04-11 14:13:54 +0400 )редактировать

AGI не использую и не установлен.

Sevruga ( 2012-04-11 17:34:32 +0400 )редактировать

угу. тяжко.многопоточное прилжение с кучей goto и вообще никто четко не может сказать чтооно делает в некоторых местах. fastagi ничего не уменьшает. если вы не умеете готовить, не значит что никто не умеет.

meral ( 2012-04-12 08:15:12 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2012-04-11 09:08:21 +0400

Просмотрен: 2,138 раз

Обновлен: Apr 12 '12

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.