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

}

时间: 2024-10-13 16:00:51

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

Vue (表单、斗篷、条件、循环指令,分隔符成员、计算属性成员、属性的监听、vue组件、子组件)

表单指令 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>表单指令</title> </head> <body> <div id="app"> <form action=""> <!--属性指令:v-model=

Android之怎样设置文本改变监听

文本改变监听: username为EditText的一个对象 username.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //參数依次代表的意思:s文本内容,start从第几个字符開始改变,before(自己能够測试一下.我没測试),count改变的字符个数 // TODO Au

Android之如何设置文本改变监听

文本改变监听: username为EditText的一个对象 username.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //参数依次代表的意思:s文本内容,start从第几个字符开始改变,before(自己可以测试一下,我没测试),count改变的字符个数 // TODO Au

KVO-对象属性值改变监听

key value observer 键值观察 一.使用方法: 以person对象为例,person中的属性name,监听name值改变的方法 //添加监听的属性keyPath  options:要监听的是新值还是旧值 [self.person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil]; //监听

Java 中的事件监听机制

看项目代码时遇到了好多事件监听机制相关的代码.现学习一下: java事件机制包含三个部分:事件.事件监听器.事件源. 1.事件:继承自java.util.EventObject类,开发人员自己定义. package com.shuyan.javatest.EventTest; import java.util.EventObject; public class DnsEvent extends EventObject { private String userData; private long

Vue计算属性和监听属性

一.计算属性 计算属性关键词: computed.计算属性在处理一些复杂逻辑时是很有用的. 可以看下以下反转字符串的例子: <div id="app"> {{ message.split('').reverse().join('') }} </div> //模板变的很复杂起来,也不容易看懂理解 使用了计算属性的实例: <div id="app"> <p>原始字符串: {{ message }}</p> &l

微信小程序全局变量改变监听

问题来源 最近工作需要写小程序页面,其中有个页面情况为:父页面中包含了一个组件页面,组件页面中又包含了另外一个组件页面.需求为:点击最后一个组件页面中的一个view,需要显示最外层父页面中的一个弹出层,并且动态的展示值,这个值的来源就是最后一个组件页面中的内容. 处理办法 当时想到的就是使用全局变量,在 app.js 中定义好全局变量,点击组件页面时就修改全局变量的值,父页面同样使用全局变量的值,这样一来就可以动态打开/关闭弹出层且传递值了. 下面先看看 app.js 中怎么定义的: globa

表单、条件、循环指令,分隔符,前端数据库,过滤器,计算属性,监听属性,冒泡排序

目录 一. 表单指令 1. v-model = "变量" (1)普通input框 (2)单选input框 (3)单一复选input框 (4)多复选input框 2. 实例 二.条件指令 1. v-show="布尔变量" 2. v-if="布尔变量" 3. v-if v-else-if v-else 4. 实例 三.循环指令 1. v-for="变量 in 可迭代对象" (1)遍历字符串或数组 (2)遍历对象(字典) 2. 实例

Java中的事件监听机制

鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动作发生在哪个组件上,那么该组件就是事件源对象 2.事件监听方法: addMouseListener(MouseListener ml) ;该方法主要用来捕获鼠标的释放,按下,点击,进入和离开的动作:捕获到相应的动作后,交由事件处理类(实现MouseListener接口)进行处理. addAction