zoukankan      html  css  js  c++  java
  • 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("建立新的队列");
     }

    }

  • 相关阅读:
    linux网络编程之socket编程(三)
    linux网络编程之socket编程(二)
    字符串转成时间戳
    xls的读写
    统计词语频率保存到xls
    信息时代的学习(对于人类)
    编码格式简介:ASCII码、ANSI、GBK、GB2312、GB18030和Unicode、UTF-8,BOM头
    ThinkPHP中:RBAC权限控制的实习步骤
    getField()和select()方法的区别
    按钮美化,变化显示效果
  • 原文地址:https://www.cnblogs.com/cbdd/p/5497115.html
Copyright © 2011-2022 走看看