📄 cmppinfo.java
字号:
package com.hoten.cmpp;
import java.util.*;
import com.hoten.cmpp.message.*;
import com.hoten.cmpp.type.*;
/**
* <p>Title:CMPPInfo </p>
* <p>Description: 主要用来封装相同地区运营商的CMPP实例</p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/
public class CMPPInfo {
private String YD_Name;//运营商名称
private String cmppFlag;//cmpp类型
private int mo_Num;//只接收cmpp数.
private int mt_Num;//只发送cmpp数
private int momt_Num;//接收发送cmpp数
private Vector moList;//只接收cmpp队列
private Vector mtList;//只发送cmpp队列
private Vector momtList;//接收发送cmpp队列
private String spNum; //sp特号号 例如8555
private String rpSPNum;//替代sp特号号例如9555即用9555来替代8555
private String id=null;//CMPP各类的路径
private String host;//移动网关地址
private int port;//端口
private String auth;//认证码
private String icp_ID;//公司sp代码以9开头的六位数
private String user;//用户登陆名称一般与icp_ID相同
private int version;//版本号
private String timeStamp;//时间戳
private Vector error=new Vector();//消息错误队列
private Vector deliverMsgList=null;//接收消息队列
/**
* 构造函数
* @param name 运营商名称
* @param cmppFlag CMPP类型标志(主要有3中:MO,MT,MOMT)
* @param mo_Num MO类型数量
* @param mt_Num MT类型数量
* @param momt_Num MOMT类型数量
* @param host 移动网关地址
* @param auth 认证码
* @param icp_ID 公司sp代码以9开头的六位数
* @param timeStamp 时间戳
* @param port 端口
* @param version 版本号
* @param user 用户登陆名称一般与icp_ID相同
*/
public CMPPInfo(String name,String cmppFlag,int mo_Num,int mt_Num,int momt_Num,String host,String auth,String icp_ID,String timeStamp,int port,int version,String user,String spNum,String rpSPNum) {
YD_Name=name;
this.cmppFlag=cmppFlag;
this.mo_Num=mo_Num;
this.mt_Num=mt_Num;
this.momt_Num=momt_Num;
if(mo_Num!=0) moList=new Vector();
if(mt_Num!=0) mtList=new Vector();
if(momt_Num!=0) momtList=new Vector();
this.host=host;
this.port=port;
this.auth=auth;
this.version=version;
this.timeStamp=timeStamp;
this.icp_ID=icp_ID;
this.user=user;
this.spNum=spNum;
this.rpSPNum=rpSPNum;
this.id=getCMPPPath(cmppFlag);
deliverMsgList=new Vector();
}
private String getCMPPPath(String flag){
if(flag.equals("CMPP"))
return "com.hoten.cmpp.type.CMPP";
return "com.hoten.cmpp.type.CMPP_"+flag;
}
/**
* 取得移动运营商名称
* @return 移动运营商名称缩写
*/
public String getYDName(){
return YD_Name;
}
/**
*取得调用CMPP的类型
* @param flag "DELIVER" 表示MO消息接收有两类:纯MO以及MOMT收发类型
* "SUBMIT" 表示MT消息下发有两类:纯MT以及MOMT收发类型
* @return String 返回的值"MO","MT"or "MOMT";
*/
public String getFlag(String flag){
if(flag.equals("DELIVER")){
if(mo_Num!=0)
return "MO";
if(momt_Num!=0){
return "MOMT";
}
return null;
}
if(flag.equals("SUBMIT")){
if(mt_Num!=0)
return "MT";
if(momt_Num!=0){
return "MOMT";
}
return null;
}
return null;
}
/**
* 取得一个CMPP实例
* @param flag 连接类型
* @param timeOut 延迟时间
* @return CMPP_Service CMPP通用接口
* @throws Exception 如果错误则抛出异常
*/
public synchronized CMPP_Service getCMPP(String flag,long timeOut)throws Exception{
long startTime = new Date().getTime();
CMPP_Service cmpp=null;
while ((cmpp = getCMPP(flag)) == null) {
try {
wait(timeOut); //有notifyAll()唤醒或时间到自动唤醒
}
catch (InterruptedException e) {}
if ((new Date().getTime() - startTime) >= timeOut) {
return null;
}
}
return cmpp;
}
/**
* 取得一个CMPP实例
* @param flag 连接类型
* @return CMPP_Service CMPP通用接口
* @throws Exception 如果错误则抛出异常
*/
public synchronized CMPP_Service getCMPP(String flag)throws Exception{
Vector list = getList(flag);
if(list.size()!=0){
return (CMPP_Service)list.remove(0);
}else{
return null;
}
}
/**
* 释放一个CMPP连接
* @param flag 连接类型
* @param cmpp 要释放的实例
*/
public synchronized void freeCMPP(String flag,CMPP_Service cmpp){
Vector list = getList(flag);
if(cmpp!=null){
list.addElement(cmpp);
}
notifyAll();
}
private Vector getList(String flag){
if(flag.equals("MO")){
return moList;
}
if(flag.equals("MT")){
return mtList;
}
if(flag.equals("MOMT")){
return momtList;
}
return null;
}
/**
* 整个与该运营商的CMPP连接都退出
*/
public void quit(){
if(mo_Num!=0){
while(moList.size()!=0){
((CMPP_Service)moList.remove(0)).quit();
}
}
if(mt_Num!=0){
while(mtList.size()!=0){
((CMPP_Service)mtList.remove(0)).quit();
}
}
if(momt_Num!=0){
while(momtList.size()!=0){
((CMPP_Service)momtList.remove(0)).quit();
}
}
}
/**
* 正真创建CMPP实例的地方
* @param list 用来存储生成的实例
* @param num 要创建的数目
* @param flag 要创建的类型
* @return true 创建成功 , false失败 *
*/
private boolean init(Vector list,int num,String flag){
if(num!=0){
for(int i=0;i<num;i++){
try {
Thread.currentThread().sleep(1000);
}
catch (Exception ex) {
}
CMPP_Service cmpp=null;
cmpp = CMPPFactory.creatCMPP(id);
if (cmpp.initCMPP(YD_Name, host, icp_ID, user, auth, timeStamp, version,
port, flag, deliverMsgList, spNum, rpSPNum) != 0) {
return false;
}
list.addElement(cmpp);
}
}
return true;
}
/**
* 创建CMPP实例
* @param flags 要创建连接的类型
* @return true创建成功,false创建失败
* @throws Exception 创建失败抛出错误
*/
public boolean CMPPInit(String flags){
boolean flag=true;
if(flags.equals("MO")){
flag=init(moList,1,"MO");
if(!flag) return flag;
}
if(flags.equals("MT")){
flag=init(mtList,1,"MT");
if(!flag) return flag;
}
if(flags.equals("MOMT")){
flag=init(momtList,1,"MOMT");
if(!flag) return flag;
}
return true;
}
/**
* 初始化CMPP实例
* @return true创建成功,false创建失败
* @throws Exception 创建失败抛出错误
*/
public boolean CMPPInit(){
boolean flag=true;
if(mo_Num!=0){
flag=init(moList,mo_Num,"MO");
if(!flag) return flag;
}
if(mt_Num!=0){
flag=init(mtList,mt_Num,"MT");
if(!flag) return flag;
}
if(momt_Num!=0){
flag=init(momtList,momt_Num,"MOMT");
if(!flag) return flag;
}
return true;
}
/**
* 取得MO消息队列
* @return 消息队列句柄
*/
public Vector getMsgList(){
return deliverMsgList;
}
/**
* 取得出错消息队列
* @return 出错消息队列句柄
*/
public Vector getErrorList(){
return error;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -