You can use threads and queues in your program to interface with AMI. Your main thread should get all the events from * and based on some logic enqueue it. Some other thread should be listening to the queue and in that thread you are free to read the input whenever you want. This way you are free to keep listening from the AMI as fast as you can and also your other thread will process them at its own pace.<br>
<br>Cheers<br><br><div class="gmail_quote">On Tue, Mar 8, 2011 at 5:27 PM, Faisal Hanif <span dir="ltr">&lt;<a href="mailto:faisal@vopium.com">faisal@vopium.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
AMI is single threaded link so waiting on it will bring things to hang mode<br>
but FastAGI &amp; dialplan is multithread. Better to manage all info by AMI in a<br>
local hash or array and use sleep/waiting on AGI till required info<br>
populated to hash/array by AMI.<br>
<div><div></div><div class="h5"><br>
-----Original Message-----<br>
From: <a href="mailto:asterisk-users-bounces@lists.digium.com">asterisk-users-bounces@lists.digium.com</a><br>
[mailto:<a href="mailto:asterisk-users-bounces@lists.digium.com">asterisk-users-bounces@lists.digium.com</a>] On Behalf Of Corentin Le<br>
Gall<br>
Sent: Tuesday, March 08, 2011 4:31 PM<br>
To: <a href="mailto:asterisk-users@lists.digium.com">asterisk-users@lists.digium.com</a><br>
Subject: [asterisk-users] (fast) AGI and AMI synchronization ?<br>
<br>
Hi,<br>
<br>
I&#39;ve been developing some CTI software around asterisk for a while, mainly<br>
with the help of AMI and fast AGI.<br>
It works quite fine, but I have some trouble sometimes with the<br>
un-synchronized property of these 2.<br>
Let me explain, we have a dialplan like this one :<br>
<br>
exten = s,n,UserEvent(useful_input_data)<br>
(...) a few actions<br>
exten = s,n,AGI(agi://<a href="http://127.0.0.1:3333/fetch,queuename" target="_blank">127.0.0.1:3333/fetch,queuename</a>)<br>
<br>
The idea is to setup a &quot;cti server&quot; that talks with both AMI and AGI<br>
channels, the first one mainly when one just want to send some data from<br>
asterisk to the &quot;cti server&quot;, and the second one when the dialplan needs<br>
some data from this server.<br>
<br>
My issue is that the AGI requests are received (from the CTI server point of<br>
vue) a little bit before the AMI events. In most cases, I don&#39;t really care<br>
because it is only &quot;a little&quot;, and the data asterisk needs to fetch from the<br>
AGI are set on time. But sometimes not, especially in cases like above, when<br>
there are only a few dialplan lines between UserEvent and AGI ...<br>
<br>
In order to handle that, I thought &quot;let&#39;s make a sync/meeting point, with<br>
the help of the AMI NewExten event, when the app is AGI&quot;.<br>
The idea would be to keep the AGI connection open as long as the good AMI<br>
NewExten event is not received, then to reply and close it, in order for the<br>
dialplan to proceed.<br>
However, when trying to do this, nothing more occurs on the AMI connection,<br>
thus I come to a deadlock ...<br>
<br>
My question is then, before switching to -dev issues : is there an option<br>
somewhere to handle this, whether on the AMI or on the AGI side ?<br>
The asterisk version we&#39;ve been using for a long time is 1.4 and my current<br>
attempts are done on 1.8 branch.<br>
<br>
Thanks,<br>
--<br>
Corentin LE GALL<br>
Proformatique (Groupe Avencall) - 10bis rue Lucien Voilin - F-92800 Puteaux<br>
Tel (+33/0)1.41.38.99.60 - Fax (+33/0)1.41.38.99.70 <a href="http://wiki.xivo.fr" target="_blank">http://wiki.xivo.fr</a><br>
<br>
--<br>
_____________________________________________________________________<br>
-- Bandwidth and Colocation Provided by <a href="http://www.api-digital.com" target="_blank">http://www.api-digital.com</a> -- New to<br>
Asterisk? Join us for a live introductory webinar every Thurs:<br>
               <a href="http://www.asterisk.org/hello" target="_blank">http://www.asterisk.org/hello</a><br>
<br>
asterisk-users mailing list<br>
To UNSUBSCRIBE or update options visit:<br>
   <a href="http://lists.digium.com/mailman/listinfo/asterisk-users" target="_blank">http://lists.digium.com/mailman/listinfo/asterisk-users</a><br>
<br>
<br>
--<br>
_____________________________________________________________________<br>
-- Bandwidth and Colocation Provided by <a href="http://www.api-digital.com" target="_blank">http://www.api-digital.com</a> --<br>
New to Asterisk? Join us for a live introductory webinar every Thurs:<br>
               <a href="http://www.asterisk.org/hello" target="_blank">http://www.asterisk.org/hello</a><br>
<br>
asterisk-users mailing list<br>
To UNSUBSCRIBE or update options visit:<br>
   <a href="http://lists.digium.com/mailman/listinfo/asterisk-users" target="_blank">http://lists.digium.com/mailman/listinfo/asterisk-users</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><font color="#888888"><div>Best Ragards</div><div>Rizwan Qureshi</div><div>VoIP/Asterisk Engineer</div><div>Axvoice Inc.</div>
<div>V: +92 (0) 3333 6767 26</div><div>E: <a href="mailto:rizwanhasham@gmail.com" target="_blank">rizwanhasham@gmail.com</a></div><div>W: <a href="http://www.axvoice.com/" target="_blank">www.axvoice.com</a></div></font><br>