Страница 1 из 1

AGI_AsteriskManager и события

Добавлено: 26 апр 2011, 19:23
mcsa2003
Добрый день.

Пытаюсь подписаться на события, которые Астер может отдавать подключенным менеджерам.
Просто через телнет ломлюсь
lelnet localhost 5038

Код: Выделить всё

Action: Login
ActionID: 1
Username: activa
Secret: activa
События в консоль попадают.

Пытаюсь сделать то-же при помощи php и AGI_AsteriskManage

Код: Выделить всё

<?php
require_once "lib/phpagi-asmanager.php";
$ami = new AGI_AsteriskManager();
$res = $ami->connect('localhost','activa','activa');
$ami->Events("on");
if($res === TRUE) {
    echo "Connection established.\n";
    $ami->add_event_handler('*', 'dump_event');
    while (1 == 1) {
        sleep(10);
    }
} else {
    echo "Connection failed.\n";
    exit;
}

function dump_event($ecode,$data,$server,$port) {
	echo "received event '$ecode' from $server:$port\n";
	print_r($data);
}
?>
И в консоли после Connection established полная тишина. Может кто подскажет почему?

Re: AGI_AsteriskManager и события

Добавлено: 27 апр 2011, 09:23
Samael28
А лучше - написать службу. Бесконечный цикл, насколько я знаю, скушает слишком много процессора.

Re: AGI_AsteriskManager и события

Добавлено: 18 апр 2012, 15:42
Samael28
Переподниму тему.... Задача примерно такая же. Т.е. получить события от Asterisk. Код взял из первого сообщения. Но хитрость то в том, что скрипт не завершается, а продолжает висеть в память благодаря

Код: Выделить всё

    while (1 == 1) {
        sleep(10);
    }
Тогда почему не вызывается функция dump_event?

Re: AGI_AsteriskManager и события

Добавлено: 18 апр 2012, 16:59
Samael28
Да, спасибо. Работает. Буду искать отличия :) Плюс, стабильно работать тоже попытаюсь заставить :)

Re: AGI_AsteriskManager и события

Добавлено: 04 май 2012, 02:41
Aven
Столкнулся с этой же проблемой, не вызывается функция колбэка пока не запустишь wait_response, а она в бесконечном цикле висит. Есть ли выход?

Re: AGI_AsteriskManager и события

Добавлено: 04 май 2012, 11:40
Aven
Так тоже не работает. Прилетает:

Код: Выделить всё

[May  4 11:32:59] ERROR[30225]: utils.c:1211 ast_careful_fwrite: fwrite() returned error: Broken pipe
Т.е. клиент AMI не читает отправляемые ему данные.

Вот такой код у меня сейчас:

Код: Выделить всё

$ami->add_event_handler('PeerEntry', 'PeerEntry');

// Нормально возвращает респонз, но эвенты дальше не попадает в колбэк функцию :(
$res = $ami->SIPpeers();

// сколько тут не жди эвенты он не прочитает, хотя они приходят мгновенно
sleep("3");

function PeerEntry($ecode, $data, $server, $port) {
   $event = $data['Event'];
   echo "2<br>";
}


Re: AGI_AsteriskManager и события

Добавлено: 04 май 2012, 12:29
Aven
Ну все правильно.
Читает он только при запуске wait_response.
А вот таймаут в этой функции не работает...
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
12:46:16 do response
12:46:16 SIPpeers
12:46:16 do event
12:46:16 do response
12:46:16 begin
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerlistComplete
12:47:16 do
12:47:16 end

Re: AGI_AsteriskManager и события

Добавлено: 04 май 2012, 13:05
Aven
Вообщем я нашел решение.
Делаем $ami->Ping(); и wait_response считает все накопившееся в буфере эвенты и выйдет при считывании респонза от этой команды.

Re: AGI_AsteriskManager и события

Добавлено: 04 май 2012, 15:38
Aven
Так у меня именно такой случай и есть.
Экшен SIPpeers
респонз SIPpeers
потом уже каждый пир в отдельном эвенте PeerEntry прилетает
и завершается все эвентом PeerlistComplete