取消
显示结果 
搜索替代 
您的意思是: 
cancel
2531
查看次数
0
有帮助
0
评论
tao.li
Level 3
Level 3
下面给出我写的一个demo,但是用Cisco电话拨打的时候,后台并没有获取到信令信息,超级郁闷,请大侠们指点一二。
public class JTAPIConnection implements ProviderObserver{
static Condition conditionInService = new Condition ();
public static Provider getServerConnection(){
String providerName = "192.168.20.68";
String login = "cti_1";
String passwd = "123456";
Provider provider = null;
try {
JtapiPeer peer = JtapiPeerFactory.getJtapiPeer ( null );
String providerString = providerName + ";login=" + login + ";passwd=" + passwd;
System.out.println ( "Opening " + providerString + "...\n" );
provider = peer.getProvider ( providerString );
System.out.println("---------连接成功--------------->"+conditionInService.getCause());
System.out.println("------连接成功,得到服务器IP----->"+provider.getName());
}catch (Exception e) {
System.out.println( "Caught exception " + e );
}
return provider;
}
public static Address[] getAddress(){
Provider provider=JTAPIConnection.getServerConnection();
Address[] address = null;
try {
address = provider.getAddresses();
} catch (ResourceUnavailableException e) {
e.printStackTrace();
}
// for(int i=0;i
// System.out.println("地址----分机号码------->"+address);
// }
return address;
}
public JTAPIConnection(){
Provider provider=JTAPIConnection.getServerConnection();
/*//获取交换机上面所有的分机
Thread.sleep(500);
Address[] address=provider.getAddresses();
for(int i=0;i
System.out.println("地址----分机号码------->"+address);
}*/
try {
Thread.sleep(500);
provider.addObserver(this);
conditionInService.waitTrue ();
System.out.println ( "开始监控----------------------" );
Address address1;
Address[] address=provider.getAddresses();
for(int i=0;i
//System.out.println("地址----分机号码------->"+address);
address1=address;
address1.addObserver(new JTAPIOutMessage());
}
Terminal term1 = null;
// term1=address1.getTerminals();
Terminal[] terminals = provider.getTerminals();
if (terminals == null) {
System.out.println("No Terminals on Address.");
System.exit(0);
}
for (int i = 0; i < terminals.length; i++) {
term1 = terminals;
term1.addObserver(new JTAPIOutMessage());
}
Call call = null;
call=(CiscoCall)provider.createCall();
call.addObserver(new JTAPIOutMessage());
//provider.shutdown();
} catch (Exception e) {
System.out.println( "Caught exception " + e );
}
}
public static void main(String[] args) {
new JTAPIConnection();
}
public void providerChangedEvent(ProvEv[] evenList) {
if (evenList != null) {
for (int i = 0; i < evenList.length; i++) {
if (evenList instanceof ProvInServiceEv) {
conditionInService.set();
}
}
}
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
public class JTAPIOutMessage implements AddressObserver, TerminalObserver ,CallControlCallObserver,CiscoTerminalObserver{
Condition conditionInService = new Condition ();
public Address observedAddress;
private Terminal observedTerminal;
private boolean addressInService;
private boolean terminalInService;
public void initialize () {
Provider provider=JTAPIConnection.getServerConnection();
Address[] addresses=JTAPIConnection.getAddress();
for(int i=0;i
System.out.println("地址----分机号码------->"+addresses);
}
try {
if ( observedAddress != null ) {
System.out.println(("增加 观察者的地址 "+ observedAddress.getName ()));
observedAddress.addCallObserver ( this );
//Now add observer on Address and Terminal
System.out.println(("增加 观察者的地址"+ observedAddress.getName ()));
observedAddress.addObserver ( this );
System.out.println(("增加 终端的 观察者终端"+ observedTerminal.getName ()));
observedTerminal.addObserver ( this );
}
}
catch ( Exception e ) {
System.out.println( "Caught exception " + e );
}
}
/* (non-Javadoc)
* @see javax.telephony.TerminalObserver#terminalChangedEvent(javax.telephony.events.TermEv[])
*/
public void terminalChangedEvent(TermEv[] events) {
for (int i = 0; i < events.length; i++) {
Terminal terminal = events.getTerminal();
switch (events.getID()) {
case CiscoTermInServiceEv.ID:
System.out.println("terminalChangedEvent Received " + events + " for " + terminal.getName());
conditionInService.set();
break;
case CiscoTermOutOfServiceEv.ID:
System.out.println("terminalChangedEvent Received " + events + " for "+ terminal.getName());
break;
}
// 判断是否得到有关 Address 的事件
if (events instanceof AddrEv) {
// 如果是有关于 Address 的事件,则利用这个事件获得相关的 Address 实例
String name = null;
try {
Address addr = ((AddrEv )events).getAddress();
// 从这个 Address 实例获取主叫号码
name = addr.getName();
} catch (Exception excp) {
// 处理异常
}
String msg = "Connection to Address: " + name + " is ";
// 分析这个事件的具体类型并进行相应处理
// 这个事件属于“震铃”事件,进行相应处理。
String naString=null;
if (events.getID() == ConnAlertingEv.ID) {
System.out.println(msg + "ALERTING");
Address addr = ((AddrEv )events).getAddress();
naString=addr.getName();//被叫号码
}

// 这个事件属于“来话接起”事件,进行相应处理。
else if (events.getID() == ConnConnectedEv.ID) {
System.out.println(msg + "CONNECTED");
}

// 这个事件属于“挂机”事件,进行相应处理。
else if (events.getID() == ConnDisconnectedEv.ID) {
System.out.println(msg + "DISCONNECTED");
}
}
// else {
// System.out.println("events instanceof AddrEv 条件没有成立");
// }
}

}
/* (non-Javadoc)
* @see javax.telephony.AddressObserver#addressChangedEvent(javax.telephony.events.AddrEv[])
*/
public void addressChangedEvent(AddrEv[] events) {
for ( int i=0; i
Address address = events.getAddress ();
switch ( events.getID () ) {
case CiscoAddrInServiceEv.ID:
System.out.println(( "addressChangedEvent Received " + events + " for "+ address.getName ()));
addressInService = true;
// if ( terminalInService ) {
// if ( state != Actor.ACTOR_IN_SERVICE ) {
// state = Actor.ACTOR_IN_SERVICE ;
// fireStateChanged ();
// }
// }
break;
case CiscoAddrOutOfServiceEv.ID:
System.out.println(( "addressChangedEvent Received " + events + " for "+ address.getName ()));
addressInService = false;
// if ( state != Actor.ACTOR_OUT_OF_SERVICE ) {
//state = Actor.ACTOR_OUT_OF_SERVICE; // you only want to notify when you had notified earlier that you are IN_SERVICE
// fireStateChanged ();
// }
break;
}
// 判断是否得到有关 Address 的事件
if (events instanceof AddrEv) {
// 如果是有关于 Address 的事件,则利用这个事件获得相关的 Address 实例
String name = null;
try {
Address addr = ((AddrEv )events).getAddress();
// 从这个 Address 实例获取主叫号码
name = addr.getName();
} catch (Exception excp) {
// 处理异常
}
String msg = "Connection to Address: " + name + " is ";
// 分析这个事件的具体类型并进行相应处理
// 这个事件属于“震铃”事件,进行相应处理。
String naString=null;
if (events.getID() == ConnAlertingEv.ID) {
System.out.println(msg + "ALERTING");
Address addr = ((AddrEv )events).getAddress();
naString=addr.getName();//被叫号码
}
// 这个事件属于“来话接起”事件,进行相应处理。
else if (events.getID() == ConnConnectedEv.ID) {
System.out.println(msg + "CONNECTED");
}
// 这个事件属于“挂机”事件,进行相应处理。
else if (events.getID() == ConnDisconnectedEv.ID) {
System.out.println(msg + "DISCONNECTED");
}
}
}
}
/* (non-Javadoc)
* @see javax.telephony.CallObserver#callChangedEvent(javax.telephony.events.CallEv[])
*/
public final void callChangedEvent(CallEv[] events) {
System.out.println("-----------");
metaEvent ( events );
}
protected void metaEvent ( CallEv [] evlist ){
for (int i = 0; i < evlist.length; i++) {
// 判断是否得到有关 Address 的事件
if (evlist instanceof AddrEv) {
// 如果是有关于 Address 的事件,则利用这个事件获得相关的 Address 实例
String name = null;
try {
Address addr = ((AddrEv )evlist).getAddress();
// 从这个 Address 实例获取主叫号码
name = addr.getName();
} catch (Exception excp) {
System.out.println( "Caught exception " + excp );
}
String msg = "Connection to Address: " + name + " is ";
// 分析这个事件的具体类型并进行相应处理
// 这个事件属于“震铃”事件,进行相应处理。
if (evlist.getID() == ConnAlertingEv.ID) {
System.out.println(msg + "ALERTING");
}
// 这个事件属于“来话接起”事件,进行相应处理。
else if (evlist.getID() == ConnConnectedEv.ID) {
System.out.println(msg + "CONNECTED");
}
// 这个事件属于“挂机”事件,进行相应处理。
else if (evlist.getID() == ConnDisconnectedEv.ID) {
System.out.println(msg + "DISCONNECTED");
}
}
}
}
}
入门指南

使用上面的搜索栏输入关键字、短语或问题,搜索问题的答案。

我们希望您在这里的旅程尽可能顺利,因此这里有一些链接可以帮助您快速熟悉思科社区:









快捷链接