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("建立新的队列");
 }

}

asterisk-java ami3 属性改变监听的更多相关文章

  1. Vue (表单、斗篷、条件、循环指令,分隔符成员、计算属性成员、属性的监听、vue组件、子组件、各个常见的钩子函数)

    表单指令 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...

  2. java多个listener监听

    java 多个listener 监听方法 在class 名称上一行添加@Listeners 括号中用逗号隔开 @Listeners({com.example.MyListener.class,com. ...

  3. vue2之对象属性的监听

    对象属性监听的两种方法: 1.普通的watch data() { return { frontPoints: 0 } }, watch: { frontPoints(newValue, oldValu ...

  4. 科学计算三维可视化---Traits属性的监听

    Traits属性的监听 HasTraits对象所有Traits属性都自动支持监听功能,当每个Traits属性发生变化时,HasTraits对象会通知监听此属性的函数 两种监听模式 静态监听 动态监听 ...

  5. vue双向数据绑定对于数组和新增对象属性不能监听的解决办法

    出现数组不能按照索引进行跟新的原因是处于性能考虑的,但是整体数组的增加删除是可以监听到的:对于对象新增属性不能监听是因为没有在生成vue实例时候放进watcher收集依赖. 首先我们先来了解vue数据 ...

  6. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

  7. Java 中的事件监听机制

    看项目代码时遇到了好多事件监听机制相关的代码.现学习一下: java事件机制包含三个部分:事件.事件监听器.事件源. 1.事件:继承自java.util.EventObject类,开发人员自己定义. ...

  8. HeadFirst Jsp 05 (属性和监听)

    活用DD, 比如, 我想设置一个email地址, 但是不像在servlet中硬编码, 如果能再web.xml中设置一个参数, 直接拿到这个参数就更好一点. 容器建立一个servlet时, 它会读DD( ...

  9. Vue计算属性和监听属性

    一.计算属性 计算属性关键词: computed.计算属性在处理一些复杂逻辑时是很有用的. 可以看下以下反转字符串的例子: <div id="app"> {{ mess ...

随机推荐

  1. chrome浏览器世界之窗浏览器的收藏夹在哪?

    今天心血来潮,用一个查重软件删除重复文件,结果把chrome浏览器和世界之窗浏览器的收藏夹给删除了,导致我保存的好多网页都没有了,在浏览器本身和网上都没有找到这两个浏览器默认的收藏夹在哪个位置,只好用 ...

  2. visio2010对齐粘附功能

    对齐与粘附功能在绘图时应用非常广泛.可以快速将图形对齐,以及将连接点准确地吸附在你想要连接的点上. 那么visio2010对齐粘附功能隐藏在什么地方呢? 你可以点击[视图]选项卡,在[视觉帮助]组中. ...

  3. java jdbc/ojdbc 链接oracle的三种方式

    方法一:使用service_name 连接oracle  jdbc:oracle:thin:@//:/<service_name> 例如: jdbc:oracle:thin:@//10.1 ...

  4. 线程之间的通信socketpair【学习笔记】【原创】

    平台信息:内核:linux3.1.0系统:android5.0平台:tiny4412 作者:庄泽彬(欢迎转载,请注明作者) 说明: 韦老师的安卓视频学习笔记 一.在一个进程中多个线程如何进行通信,主要 ...

  5. YTU 2844: 改错题A-看电影

    2844: 改错题A-看电影 时间限制: 1 Sec  内存限制: 128 MB 提交: 69  解决: 47 题目描述 注:本题只需要提交标记为修改部分之间的代码,请按照C++方式提交. 小平家长为 ...

  6. phpstorm更改sql文件匹配类型

    正常情况下,sql文件都有对应的文件类型.但是默认的sql文件只是关联普通的sql.很多语法都无法高亮,以及自动提醒.

  7. ACTION 关联表之间查询语句 SQL语句写法

    /** EquUseRecord * @author cll * @return * @右边菜单中的使用记录操作 */ public String QueryAllEquUserecordAllInf ...

  8. python编写猜拳代码

    一.项目要求: 电脑随机出拳和用户猜拳三次.胜利条件如下: (1)(石头 胜 剪刀) (2)(剪刀 胜 布) (3)(布 胜 石头) 二.代码 #!/usr/bin/env python # -*- ...

  9. 解决UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position xxx ordinal not in range(128)

    Python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't deco ...

  10. javascript 反斜杠\

    通常,我们在动态给定一个div的innerHTML时,通常是样做的: <div id="demo1" /> <SCRIPT> var demo= docum ...