Asterisk + asterisk-java收听新频道

时间:2014-04-24 12:11:46

标签: java events asterisk channels

Asterisk 11.4.0 Asterisk-java:1.0.0.CI-SNAPSHOT

我尝试运行此代码:

import org.asteriskjava.live.AsteriskChannel;
import org.asteriskjava.live.AsteriskQueue;
import org.asteriskjava.live.AsteriskQueueEntry;
import org.asteriskjava.live.internal.AsteriskAgentImpl;
import org.asteriskjava.live.AsteriskServer;
import org.asteriskjava.live.AsteriskServerListener;
import org.asteriskjava.live.DefaultAsteriskServer;
import org.asteriskjava.live.ManagerCommunicationException;
import org.asteriskjava.live.MeetMeRoom;
import org.asteriskjava.live.MeetMeUser;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;

public class HelloLiveEverything implements AsteriskServerListener, PropertyChangeListener
{
private AsteriskServer asteriskServer;

public HelloLiveEverything()
{
    asteriskServer = new DefaultAsteriskServer("localhost", "manager", "password");
}

public void run() throws ManagerCommunicationException
{
    // listen for new events
    asteriskServer.addAsteriskServerListener(this);
    // add property change listeners to existing objects
    for (AsteriskChannel asteriskChannel : asteriskServer.getChannels())
    {
        System.out.println(asteriskChannel);
        asteriskChannel.addPropertyChangeListener(this);
    }
}

public void onNewAsteriskChannel(AsteriskChannel channel)
{
    System.out.println(channel);
    channel.addPropertyChangeListener(this);
}

public void onNewMeetMeUser(MeetMeUser user)
{
    System.out.println(user);
    user.addPropertyChangeListener(this);
}


    public void onNewQueueEntry(AsteriskQueueEntry user)
{
    System.out.println(user);
    user.addPropertyChangeListener(this);
}

    public void onNewAgent(AsteriskAgentImpl user)
{
    System.out.println(user);
    user.addPropertyChangeListener(this);
}


public void propertyChange(PropertyChangeEvent propertyChangeEvent)
{
    System.out.println(propertyChangeEvent);
}

public static void main(String[] args) throws Exception
{
    HelloLiveEverything helloLiveEverything = new HelloLiveEverything();
    helloLiveEverything.run();
    while (true) {
}

}
}

执行时,连接可以。此代码显示当前频道,但在呼叫者拨打电话时从不向我显示新频道。 当新的星号通道打开时,我需要捕捉事件。 我做错了什么? 谢谢

1 个答案:

答案 0 :(得分:1)

试试这个: 您的班级HelloLiveEverything应该实施ManagerEventListener
然后覆盖onManagerEvent方法

@Override
 public void onManagerEvent(ManagerEvent event) {
        String event_name = event.getClass().getSimpleName();
        if (event_name.equals("DialEvent")) {
        DialEvent e = (DialEvent) event;
        System.out.println(e.getCallerIdNum());//caller number
        System.out.println(e.getDestination());//Called number
//do something here
}
    }

编辑asterisk manager.conf:
[manager] secret = password deny=0.0.0.0/0.0.0.0
permit=209.16.236.73/255.255.255.0; change this ip with one your java app is using permit=127.0.0.1/255.255.255.0 read = system,call,log,verbose,command,agent,user,originate; add full permission write = system,call,log,verbose,command,agent,user,originate; add full permission