⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmppinfo.java

📁 使用华为cmpp2.0网关
💻 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 + -