📄 cmpp_dr.java
字号:
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 + -