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

📄 cmpp_dr.java

📁 短信
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    private byte[] getSendMsg(CMPPSubmitMessage msg)throws Exception{
        int length=0;
        byte send[]= new byte[1024*3];
        System.arraycopy(icp.getBytes(),0,send,0,icp.getBytes().length);
        length+=icp.getBytes().length+1;
        if(msg.sServiceId!=null){
            System.arraycopy(msg.sServiceId.getBytes(),0,send,length,msg.sServiceId.getBytes().length);
            length+=msg.sServiceId.getBytes().length+1;
        }else
            length++;
        send[length]=(byte)Integer.parseInt(msg.sFeeType);
        length++;
        System.arraycopy(Tools.int2byte(Integer.parseInt(msg.sFeeCode)),0,send,length,4);
        length+=4;
        send[length]=(byte)msg.nTPpId;
        length++;
        send[length]=(byte)msg.nNeedReply;
        length++;
        send[length]=(byte)msg.nMsgLevel;
        length++;
        if(msg.sValidTime!=null){
            System.arraycopy(msg.sValidTime.getBytes(),0,send,length,msg.sValidTime.getBytes().length);
            length+=msg.sValidTime.getBytes().length+1;
        }else{
        	System.out.println("sValidTime is null");
            length++;
        }
        if(msg.sAtTime!=null){
            System.arraycopy(msg.sAtTime.getBytes(),0,send,length,msg.sAtTime.getBytes().length);
            length+=msg.sAtTime.getBytes().length+1;
        }else{
            length++;
        }
        send[length]=(byte)msg.nFeeUserType;
        length++;
        if(msg.sFeeMobile!=null){
            System.arraycopy(msg.sFeeMobile.getBytes(),0,send,length,msg.sFeeMobile.getBytes().length);
            length+=msg.sFeeMobile.getBytes().length+1;
        }else{
            length++;
        }
        System.arraycopy(msg.sSrcId.getBytes(),0,send,length,msg.sSrcId.getBytes().length);
        length+=msg.sSrcId.getBytes().length+1;

        length++;
        System.arraycopy(msg.getDestBytes_DR(),0,send,length,msg.getDestBytes_DR().length);
        send[length-1]=(byte)msg.nDestUsrTl;
        length+=msg.getDestBytes_DR().length;
        send[length]=(byte)msg.nMsgFormat;
        length++;

        if(msg.sMsgContent==null && msg.nNeedReply==2) msg.sMsgContent="JF";

        if(msg.picAndRing!=null){
            send[length]=(byte)msg.picAndRing.length;
            length++;
            System.arraycopy(msg.picAndRing,0,send,length,msg.picAndRing.length);
            length+=msg.sMsgContent.getBytes().length;
        }else{
            byte[] sMsgContent=null;
            try {
                if(msg.nMsgFormat==8)
                    sMsgContent=msg.sMsgContent.getBytes("iso-10646-ucs-2");
                else if(msg.nMsgFormat==15)
                    sMsgContent=msg.sMsgContent.getBytes("gb2312");
                else
                    sMsgContent=msg.sMsgContent.getBytes("iso-8859-1");
            }
            catch (Exception ex) {
            }
            send[length]=(byte)sMsgContent.length;
            length++;
            System.arraycopy(sMsgContent,0,send,length,sMsgContent.length);
            length+=sMsgContent.length+1;
        }
        byte[] msgs = new byte[length];
        System.arraycopy(send,0,msgs,0,length);
        return msgs;
    }

    //信息删除
    public int Cancel(){
        CMPPCancelMessage cancelMessage = new CMPPCancelMessage();
        CMPPCancelMessageResp cancelResp = new CMPPCancelMessageResp();

        return 1;
    }
    private CMPPHead dealMsg(CMPPHead head,byte[] msg)throws IOException,Exception{
        CMPPHead backMsg = new CMPPHead();
        int stat=head.stat;
        System.out.println(" nCommandID = " + Integer.toHexString(head.nCommandID ));
        System.out.println(" stat = " + head.stat);
        switch (head.nCommandID){
            case COMMAND_CMPP_NACK_RESP:
                break;
            case COMMAND_CMPP_CONNECT_RESP:
                CMPPConnectMessageResp cResp = new CMPPConnectMessageResp();
                if(msg==null){
                    cResp.nStatus=stat;
                    backMsg=cResp;
                    break;
                }
                try {
                    cResp.sISMG=new String(msg,0,16);
                    cResp.nVersion=msg[16];
                    System.out.println("commandId = " + Integer.toHexString( head.nCommandID ));
                    System.out.println("nVersion = " + cResp.nVersion );
                    System.out.println("stat = " + stat );
                    System.out.println("size = " + head.nMsgSize );
                    System.out.println("sISMG = " + cResp.sISMG );
                }
                catch (Exception ex) {
                    stat=CONNECT_MSG_FORMAT_ERROR;
                }
                cResp.nStatus=stat;
                backMsg=cResp;
                break;
            case COMMAND_CMPP_DELIVER:
                CMPPDeliverMessage back=new CMPPDeliverMessage();
                stat = getDeliverMessage(back,msg);
                CMPPDeliverMessageResp resp = new CMPPDeliverMessageResp();
                resp.nSequenceID=back.nSequenceID;
                resp.stat=stat;
                resp.nMsgSize=16;
                try {
                    sendHead(resp);
                }
                catch (IOException ex) {
                    throw ex;
                }
                back.stat=stat;
                backMsg=back;
                break;
            case COMMAND_CMPP_SUBMIT_RESP:
                CMPPSubmitMessageResp sResp = new CMPPSubmitMessageResp();
                if(msg!=null){
                    try {
                        sResp.un_count= msg[0];
                        if(sResp.un_count!=0){
                            byte[] count = new byte[msg.length-1];
                            System.arraycopy(msg,1,count,0,msg.length-1);
                            sResp.fail_Index=count;
                        }
                    }
                    catch (Exception ex) {
                        stat=SUBMIT_MSG_FORMAT_ERROR;
                    }
                }
                sResp.stat=stat;
                backMsg=sResp;
                break;
            case COMMAND_CMPP_ACTIVE_TEST:
                CMPPActiveTestMessageResp respMsg=new CMPPActiveTestMessageResp();
                respMsg.nSequenceID=head.nSequenceID;
                respMsg.nMsgSize=16;
                try {
                    sendHead(respMsg);
                }
                catch (IOException ex) {
                    throw ex;
                }
                break;
            case COMMAND_CMPP_ACTIVE_TEST_REP:
                break;
            case COMMAND_CMPP_TERMINATE:
                CMPPHead out= new CMPPHead();
                out.nMsgSize=16;
                out.nCommandID=COMMAND_CMPP_TERMINATE_RESP;
                out.nSequenceID=head.nSequenceID;
                try {
                    sendHead(out);
                }
                catch (IOException ex) {
                    throw ex;
                }
                break;
            case COMMAND_CMPP_TERMINATE_RESP:
                break;
            
            default:
                stat=CMPP_UNKNOWN_PACKAGE_ERROR;
        }
        backMsg.nCommandID=head.nCommandID;
        backMsg.nMsgSize=head.nMsgSize;
        backMsg.nSequenceID=head.nSequenceID;
        backMsg.stat=stat;
        return backMsg;
    }

    public void deliver()throws IOException{
    	try {
        	activeTest("auto");
        }
        catch (IOException ex) {
            close();
            throw ex;
        }
    }
    //收取网关下发信息
    private CMPPHead Deliver()throws IOException{
        CMPPHead head = new CMPPHead();
        byte[] bMsg=null;
        int i=0;
        while(true){
            try {
                bMsg=read(head);
            }
            catch (InterruptedIOException ex) {
                if(i==2){
                    head.stat=DELIVER_MSG_TIME_OUT;//由于没有消息而退出--stat=1
                    break;
                }else{
                    i++;
                     continue;
                }
            }
            catch (IOException ex) {
                throw ex;
            }
            try {
                head = dealMsg(head,bMsg);
            }
            catch(IOException ex){
                throw ex;
            }
            catch (Exception ex) {
                Log.printBytes(bMsg,logFile);
                Log.printError(ex,"",logFile);
            }
            if(head.nCommandID==this.COMMAND_CMPP_ACTIVE_TEST){
                continue;
            }
            break;
        }
        return head;
    }

    //向网关查询信息流量
    public CMPPQueryMessageResp Query(){
        CMPPQueryMessage queryMessage = new CMPPQueryMessage();
        CMPPQueryMessageResp queryResp = new CMPPQueryMessageResp();

        return queryResp;
    }

    //发送测试信息
    private boolean activeTest(String flag)throws IOException{
        boolean testFlag=false;
        int timelong = (int)(System.currentTimeMillis()/1000)-checkTime;   
        boolean hasDeliver=false;
        if(flag==null||timelong>10)
            testFlag=true;
        if(testFlag){
            CMPPActiveTestMessage test = new CMPPActiveTestMessage();
            sendOut=test.setSequenceID(sendOut);
            test.nMsgSize=16;
            try {            	
                sendHead(test);
            }
            catch(IOException e){
                sendOut--;
                return false;
            }
            try {
                while(true){
                    CMPPHead back = Deliver();
                    if(back.nCommandID==this.COMMAND_CMPP_DELIVER){//
                    	//下面保存接收到的短信
                        //deliverMsgList.addElement(((CMPPDeliverMessage)back).getDeliverMsg());
                    	DeliverMsg dm = ((CMPPDeliverMessage)back).getDeliverMsg();
                    	if(dm.nIsDelivery==1){ 
                    		System.out.println("phone:"+dm.sSrcTerminalId+" 这是一个状态报告...");
                    	} else {
                    		System.out.println("收到deliver包 phone:"+dm.sSrcTerminalId+"   message:"+dm.sMsgContent);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -