asterisk-java ami3 属性改变监听
asteriskServer.addAsteriskServerListener(new AsteriskListenerInit());//服务属性监听会自动连接服务
实现AsteriskServerListener,PropertyChangeListener,对服务的通道,用户,队列,语音室所有属性改变
public class AsteriskListenerInit implements AsteriskServerListener,PropertyChangeListener{
@Override
public void propertyChange(PropertyChangeEvent evt) {
MapCacheUtil mapcache=MapCacheUtil.getInstance();
String number="";//呼叫或者呼入的号码
Object evtObj = evt.getSource();
if (evtObj instanceof AsteriskChannel) {
AsteriskChannel channel = (AsteriskChannel) evtObj;
ChannelState channelstatus=channel.getState();
if(ChannelState.RINGING==channelstatus){//通道状态是响铃中
AsteriskChannel dialichannel=channel.getDialingChannel();//呼叫此通道的上一个通道
if(dialichannel==null){//此次是呼出通话,回拨响铃中
number=channel.getCallerId().getNumber();
}else{
number=dialichannel.getCallerId().getNumber().replace("99"+BaseUtil.getnumber(channel.getName()), "");//解码协议
}
if(!mapcache.getExtensions().contains(number)){
new WebSocket().broadcast("websocket"+BaseUtil.getnumber(channel.getName()), "来电弹屏"+number);
}
}else if(ChannelState.UP==channelstatus){//通道状态是接起中
AsteriskChannel dialichannel=channel.getDialingChannel();//呼叫此通道的上一个通道
if(dialichannel!=null){
if(mapcache.getExtensions().contains(channel.getCallerId().getNumber())){//呼入通道保留方案
mapcache.put(channel.getName(), dialichannel.getName());//接起时将呼叫的通道传入缓存中
}else{//呼出通话保留方案
mapcache.put(dialichannel.getName(), channel.getName());
}
}
}else if(ChannelState.HUNGUP==channelstatus){//通道状态是挂断时
mapcache.remove(channel.getCallerId().getNumber()+BaseUtil.CHANNEL_CENTENT);//移除挂机通道缓存
mapcache.remove(channel.getName());//移除弹屏通道缓存
}
}else if (evtObj instanceof AsteriskAgentImpl) {
AsteriskAgentImpl agent = (AsteriskAgentImpl) evtObj;
System.out.println("新增代理"+agent.getName());
}
}
@Override
public void onNewAsteriskChannel(AsteriskChannel channel) {
// TODO Auto-generated method stub
MapCacheUtil instance=MapCacheUtil.getInstance();//获得缓存对象
CallerId cid=channel.getCallerId();
if(cid!=null){
instance.put(cid.getNumber()+BaseUtil.CHANNEL_CENTENT, channel.getName());//新的通道信息加入缓存中,为啦挂机使用
}
channel.addPropertyChangeListener("state",this);//只监听通道状态改变时触发操作
System.out.println(cid.getNumber()+BaseUtil.CHANNEL_CENTENT+"建立新的通道"+channel);
}
@Override
public void onNewMeetMeUser(MeetMeUser user) {
// TODO Auto-generated method stub
user.addPropertyChangeListener(this);
System.out.println("建立新的会议室");
}
@Override
public void onNewAgent(AsteriskAgentImpl agent) {
// TODO Auto-generated method stub
agent.addPropertyChangeListener(this);
System.out.println("建立新的代理");
}
@Override
public void onNewQueueEntry(AsteriskQueueEntry entry) {
// TODO Auto-generated method stub
entry.addPropertyChangeListener(this);
System.out.println("建立新的队列");
}
}
最新文章
- 10月24日下午PHP封装
- windows使用python3.4生成二维码
- css3中的颜色
- cassandra CQL 3.0 怎样实现 dynamic column;
- Oracle 热备份batch脚本 Windows
- solrj-WiKi
- 8天学通MongoDB——第六天 分片技术
- uEditor独立图片上传
- poj 2533 Longest Ordered Subsequence(dp)
- C# Winform开发框架企业版V4.0新特性
- html编码转换
- opencv BP神经网络使用过程
- (poj 3660) Cow Contest (floyd算法+传递闭包)
- Python基础-类变量和实例变量
- [100个改变摄影的伟大观念].(英)玛瑞恩.高清扫描版.pdf
- java之Servlet监听器Listener
- emWin仪表界面设计,含uCOS-III和FreeRTOS两个版本
- 搞懂Linux下的几种文件类型
- AJAX的优点 个人理解记录
- qt study2