JTAPI 开发入门 (三)

系列(一):http://my.oschina.net/delphixp/blog/284989

系列(二):http://my.oschina.net/delphixp/blog/289909

(接二)

  3、示例

  3.1 捕捉话机拨号过程所有事件

  可以说,这是 JTAPI 开发的最简单的开发例子。但是,也是很有价值的例子。因为 JTAPI 的开发,我们的逻辑代码都是在事件中实现,可以不了解事件,基本上什么事也干不成。同样,当我们的程序有问题的时候,通常这些问题都是事件理解不够,又或者状态不对造成。

  步骤

   1)获取 Provider (这是总领所有话机和 Call 的对象,就象电信公司)

   2)为 Provider 添加事件侦听器(ProviderObserver,用来处理 Provider 的事件)

   3)等待 Provider 初始化完成(Provider 的初始化需要时间,Provider 未完成初始化什么事也做不成)

   4)为话机添加所需要的事件侦听器

  所有的 JTAPI 基本上都是这样的步骤,下面是开发的代码:


import javax.telephony.JtapiPeer;
import javax.telephony.JtapiPeerFactory;
import javax.telephony.Provider;
import javax.telephony.Terminal;
import javax.telephony.callcontrol.CallControlCallObserver;
import javax.telephony.events.CallEv;
import javax.telephony.events.ProvEv;
import javax.telephony.events.ProvInServiceEv;
import javax.telephony.events.TermEv;

import com.cisco.cti.util.Condition;
import com.cisco.jtapi.extensions.CiscoProviderObserver;
import com.cisco.jtapi.extensions.CiscoTerminalObserver;

/**
 * 侦听话机事件 示例
 * 
 * 	 CiscoProviderObserver  -- 这是 Cisco 对  ProviderObserver 的扩展
 *
 *	 CiscoTerminalObserver  -- 这是  Cisco 对  TerminalObserver 的扩展
 *
 * @author xxx
 * @since: v1.0
 */
public class TestCaptureEvent implements CiscoProviderObserver, CiscoTerminalObserver, CallControlCallObserver{

	/**
	 * Provider
	 */
	private Provider provider = null;
	
	/**
	 * 信号量,用来阻塞等待 Provider 的初始化,直到完成
	 */
	final private Condition providerCondition = new Condition();
	
	/**
	 * main 方法
	 *
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception{
		TestCaptureEvent test = new TestCaptureEvent();
		
		//获得 本地化(厂家提供) JTAPI 工厂
		JtapiPeer peer = JtapiPeerFactory.getJtapiPeer("com.cisco.jtapi.CiscoJtapiPeerImpl");
		
		/**
		 * 创建 Provider
		 * 
		 * 与语音系统的连接串,这里就是 CCM 的连接串,如 JDBC URL 一样。
		 * 由三部分组成:<CCM IP>;login=<application_user>;passwd=<application_user_pwd>
		 * 其中,如果有多台 CCM Server 组成的集群,ip 之间使用逗号分隔
		 */
		String connectionString = "192.168.11.233;login=AppTest;passwd=123456";
		test.provider = peer.getProvider(connectionString);
		
		/**
		 * 添加 Provider 侦听器
		 */
		test.provider.addObserver(test);
		
		/**
		 * 等待 Provider 初始化完成
		 */
		test.providerCondition.waitTrue();
		
		/**
		 * 获取  Application User 所拥有的管理话机对象
		 */
		Terminal[] terminals = test.provider.getTerminals();
		for(Terminal terminal: terminals){
			//添加 Call 事件侦听器
			terminal.addCallObserver(test);
			
			//添加 Terminal 事件侦听器
			terminal.addObserver(test);
		}
		
	}
	
	/* (non-Javadoc)
	 * @see javax.telephony.ProviderObserver#providerChangedEvent(javax.telephony.events.ProvEv[])
	 */
	@Override
	public void providerChangedEvent(ProvEv[] eventList) {
		for(ProvEv event: eventList){
			
			System.out.println("Provider Event:" + event);
			
			/**
			 * 接收到  ProvInServiceEv 事件,表示 Provider 已经初始化完成
			 */
			if (event instanceof ProvInServiceEv){
				
				//通知主程序, Provider 已经完成初始化工作
				providerCondition.set();
			}
		}
	}

	/* (non-Javadoc)
	 * @see javax.telephony.TerminalObserver#terminalChangedEvent(javax.telephony.events.TermEv[])
	 */
	@Override
	public void terminalChangedEvent(TermEv[] eventList) {
		
		//遍历所有事件。。事件是并发的,同一时间有可能接收到多个事件
		for(TermEv event: eventList){
			
			System.out.println("Terminal Event:" + event);
		}
		
	}

	/* (non-Javadoc)
	 * @see javax.telephony.CallObserver#callChangedEvent(javax.telephony.events.CallEv[])
	 */
	@Override
	public void callChangedEvent(CallEv[] eventList) {
		
		//遍历所有  Call 事件
		for(CallEv event: eventList){
			
			System.out.println("Call Event:" + event);
		}
	}

}
   这是最基础的 JTAPI 例子,也是所有 JTAPI 程序的基础及出发点(程序框架)。


        (待续)


转载于:https://my.oschina.net/delphixp/blog/299612

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值