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("建立新的队列");
}
}
asterisk-java ami3 属性改变监听的更多相关文章
- Vue (表单、斗篷、条件、循环指令,分隔符成员、计算属性成员、属性的监听、vue组件、子组件、各个常见的钩子函数)
表单指令 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF- ...
- java多个listener监听
java 多个listener 监听方法 在class 名称上一行添加@Listeners 括号中用逗号隔开 @Listeners({com.example.MyListener.class,com. ...
- vue2之对象属性的监听
对象属性监听的两种方法: 1.普通的watch data() { return { frontPoints: 0 } }, watch: { frontPoints(newValue, oldValu ...
- 科学计算三维可视化---Traits属性的监听
Traits属性的监听 HasTraits对象所有Traits属性都自动支持监听功能,当每个Traits属性发生变化时,HasTraits对象会通知监听此属性的函数 两种监听模式 静态监听 动态监听 ...
- vue双向数据绑定对于数组和新增对象属性不能监听的解决办法
出现数组不能按照索引进行跟新的原因是处于性能考虑的,但是整体数组的增加删除是可以监听到的:对于对象新增属性不能监听是因为没有在生成vue实例时候放进watcher收集依赖. 首先我们先来了解vue数据 ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
- Java 中的事件监听机制
看项目代码时遇到了好多事件监听机制相关的代码.现学习一下: java事件机制包含三个部分:事件.事件监听器.事件源. 1.事件:继承自java.util.EventObject类,开发人员自己定义. ...
- HeadFirst Jsp 05 (属性和监听)
活用DD, 比如, 我想设置一个email地址, 但是不像在servlet中硬编码, 如果能再web.xml中设置一个参数, 直接拿到这个参数就更好一点. 容器建立一个servlet时, 它会读DD( ...
- Vue计算属性和监听属性
一.计算属性 计算属性关键词: computed.计算属性在处理一些复杂逻辑时是很有用的. 可以看下以下反转字符串的例子: <div id="app"> {{ mess ...
随机推荐
- phpstorm更改sql文件匹配类型
正常情况下,sql文件都有对应的文件类型.但是默认的sql文件只是关联普通的sql.很多语法都无法高亮,以及自动提醒.
- 使用C#开发HTTP服务器系列之访问主页
各位朋友大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是http://qinyuanpei.com.在这个系列文章的第一篇中,我们着重认识和了解了HTTP协议,并在此基础上实现了一个可交互的W ...
- 【JSOI 2008】 最大数
[题目链接] 点击打开链接 [算法] 很明显,我们可以用线段树解决此题 只需维护区间最值就可以了 [代码] #include<bits/stdc++.h> using namespace ...
- P4844 LJJ爱数数 数论
思路: 化简后得到(a+b)c=ab,设g=(a,b),A=a/g,B=b/g,则g(A+B)c=ABg^2,即(A+B)c=ABg 由题目已知条件:(a,b,c)=1,即(g,c)=1,g|(A+B ...
- bzoj4260 REBXOR——Trie树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4260 对于每个位置,求一个前缀最大值和后缀最大值: 也就是从1到 i 的异或和要找前面某处的 ...
- springMVC实现基本文件夹压缩下载功能
将文件夹压缩后下载: @Slf4j public class Test { private static final String BASE_PATH = "/root/doc/" ...
- HDU 5512 Pagodas (数论)
题意:给了初始的集合{a, b},然后取集合里的两个元素进行加或者减的操作,生成新的元素.问最后最多能生成多少个元素.问答案的奇偶性. 析:多先写几个你就会发现,答案就是 n / gcd(a, b). ...
- PCB Web版SI9000阻抗计算器
在几个月前写过一遍关于: PCB SI9000阻抗计算引擎Web方式实现方法 ,最近开始参考Polar SI9000的界面,将阻抗计算器转为网页版的方式实现. 一.Web版SI9000阻抗计算器 ...
- mybatis基础学习5---懒加载和缓存
1:懒加载 1)在主配置文件设置(要放在配置文件最前面) 1 <!-- 延迟加载配置,两个都必须同时有 --> <settings> 3 <!-- lazyLoading ...
- HDU1253:胜利大逃亡
传送门 题意 逃离迷宫 分析 用优先队列和队列都可以,但是我vis数组写在取队列首节点就MLE了,放在放入节点的地方就ac了,看来是一种固定写法,在放入节点的地方判断,可以防止放入无效点到队列,防止队 ...