📄 cmpp_dr.java
字号:
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 {
if(!activeTest("auto"))
throw new IOException();
CMPPHead back = Deliver();
if(back.nCommandID==this.COMMAND_CMPP_DELIVER){
deliverMsgList.addElement(((CMPPDeliverMessage)back).getDeliverMsg());
return;
}
if(back.nCommandID==this.COMMAND_CMPP_TERMINATE){
close();
throw new IOException();
}
}
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.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;
if(flag==null||(int)(System.currentTimeMillis()/1000)-checkTime>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());
continue;
}
if(back.stat==this.DELIVER_MSG_TIME_OUT){
throw new IOException();
}
if(back.nCommandID==this.COMMAND_CMPP_ACTIVE_TEST_REP){
checkTime=(int)(System.currentTimeMillis()/1000);
break;
}
}
}
catch (IOException ex) {
return false;
}
return true;
}
return true;
}
public boolean activeTest()throws IOException{
return activeTest(null);
}
private int getDeliverMessage(CMPPDeliverMessage msg,byte[] content)throws Exception{
if(msg==null)
return DELIVER_MSG_NULL_ERROR;
int stat=CMPP_SUCCESS;
//把content解析成所需信息
byte sDestTermID[] = new byte[21];
byte sServiceID[] = new byte[10];
byte cTpPid=0;
byte cTpUdhi=0;
byte nMsgFormat=0;
byte sSrcTermID[] = new byte[21];
byte nIsReply=0;
byte nMsgLen=0;
byte sMsgContent[]=null;
try {
int length = content.length;
int i=0;
for(;i<length;i++){
if(content[i]==0){
break;
}
}
System.arraycopy(content,0,sSrcTermID,0,i+1);
byte[] msgs=new byte[length];
System.arraycopy(content,i+1,msgs,0,length-i-1);
content=msgs;
i=0;
length=content.length;
for(;i<length;i++){
if(content[i]==0){
break;
}
}
System.arraycopy(content,0,sDestTermID,0,i+1);
msgs=new byte[length];
System.arraycopy(content,i+1,msgs,0,length-i-1);
content=msgs;
i=0;
length=content.length;
for(;i<length;i++){
if(content[i]==0){
break;
}
}
System.arraycopy(content,0,sServiceID,0,i+1);
msgs=new byte[length];
System.arraycopy(content,i+1,msgs,0,length-i-1);
content=msgs;
cTpPid=content[0];
nIsReply=content[1];
cTpUdhi=content[2];
nMsgFormat=content[3];
nMsgLen=content[4];
if(nMsgLen<0)
nMsgLen+=256;
sMsgContent= new byte[nMsgLen];
System.arraycopy(content,5,sMsgContent,0,nMsgLen);
}
catch (Exception ex) {
return DELIVER_MSG_FORMAT_ERROR;
}
/////////////////////////////////////////封装正常消息
msg.nIsDelivery=nIsReply;
msg.nMsgFormat=nMsgFormat;
msg.nMsgLength=nMsgLen;
msg.nTPpid=cTpPid;//协议标识
msg.nTPudhi=cTpUdhi;//优先级别
msg.sDestId = new String(sDestTermID).trim();
if (msg.sDestId.startsWith(spNum)) {
msg.sDestId = rpSPNum + msg.sDestId.substring(spNum.length());
msg.sDestId=msg.sDestId.trim();
}
msg.sServiceId=new String(sServiceID).trim();
msg.sSrcTerminalId=new String(sSrcTermID).trim();
try {
if(nIsReply==0){
if(nMsgFormat == 8){//ucs2编码格式
msg.sMsgContent = new String(sMsgContent,"iso-10646-ucs-2");
}else{
msg.sMsgContent=new String(sMsgContent,"gb2312");
}
}
}
catch (Exception ex) {
return DELIVER_MSG_FORMAT_DECODE_ERROR;
}
/////////////////////////////状态报告中所需字段
if(nIsReply==1){
try {
//byte[] msgID = new byte[8];
//byte[] sStat = new byte[3];
//byte[] sSubmitTime = new byte[12];
//byte[] sDoneTime = new byte[12];
int length = sMsgContent.length;
int i=0;
for(;i<length;i++){
if(sMsgContent[i]==9){
break;
}
}
byte[] msgID = new byte[i];
System.arraycopy(sMsgContent,0,msgID,0,i);
byte[] msgs=new byte[length-i-1];
System.arraycopy(sMsgContent,i+1,msgs,0,length-i-1);
sMsgContent=msgs;
i=0;
length=sMsgContent.length;
for(;i<length;i++){
if(sMsgContent[i]==9){
break;
}
}
byte[] sStat = new byte[i];
System.arraycopy(sMsgContent,0,sStat,0,i);
msgs=new byte[length-i-1];
System.arraycopy(sMsgContent,i+1,msgs,0,length-i-1);
sMsgContent=msgs;
i=0;
length=sMsgContent.length;
for(;i<length;i++){
if(sMsgContent[i]==9){
break;
}
}
byte[] sSubmitTime = new byte[i];
System.arraycopy(sMsgContent,0,sSubmitTime,0,i);
msgs=new byte[length-i-1];
System.arraycopy(sMsgContent,i+1,msgs,0,length-i-1);
sMsgContent=msgs;
i=0;
length=sMsgContent.length;
for(;i<length;i++){
if(sMsgContent[i]==9){
break;
}
}
byte[] sDoneTime = new byte[i];
System.arraycopy(sMsgContent,0,sDoneTime,0,i);
msg.setReportMsgId(msgID);
msg.sStat=new String(sStat).trim();
msg.sStat=String.valueOf(Integer.parseInt(msg.sStat));
msg.sSubmitTime=new String(sSubmitTime).trim();
msg.sDoneTime=new String(sDoneTime).trim();
}
catch (Exception ex) {
stat=DELIVER_MSG_FORMAT_REPORT_ERROR;
}
}
return stat;
}
private void sendHead(CMPPHead head)throws IOException{
byte[] send = new byte[16];
System.arraycopy(Tools.int2byte(head.nMsgSize),0,send,0,4);
System.arraycopy(Tools.int2byte(head.nCommandID),0,send,4,4);
System.arraycopy(Tools.int2byte(head.nSequenceID),0,send,12,4);
send(send);
}
private void sendPacket(CMPPHead head,byte[] msg)throws IOException{
byte[] send = new byte[16+msg.length];
head.nMsgSize=16+msg.length;
System.arraycopy(Tools.int2byte(head.nMsgSize),0,send,0,4);
System.arraycopy(Tools.int2byte(head.nCommandID),0,send,4,4);
System.arraycopy(Tools.int2byte(head.nSequenceID),0,send,12,4);
System.arraycopy(msg,0,send,16,msg.length);
send(send);
}
private void send(byte[] msg)throws IOException{
DataOutputStream out = creatOutputStream();
out.write(msg);
out.flush();
}
private byte[] read(CMPPHead head)throws InterruptedIOException,IOException{
DataInputStream in =creatInputStream();
head.nMsgSize=in.readInt();
head.nCommandID=in.readInt();
head.stat=in.readInt();
head.nSequenceID=in.readInt();
byte[] resp = null;
if(head.nMsgSize<=16){
return null;
}else{
resp=new byte[head.nMsgSize-16];
in.read(resp,0,head.nMsgSize-16);
}
return resp;
}
private DataInputStream creatInputStream()throws IOException{
return new DataInputStream(s.getInputStream());
}
private DataOutputStream creatOutputStream()throws IOException{
return new DataOutputStream(s.getOutputStream());
}
private void close(){
socketManger.freeSocket();
s=null;
}
private static final int CMPP_SUCCESS=0;
private static final int CMPP_UNKNOWN_PACKAGE_ERROR=-9;
private static final int CMPP_LOGOUT_HAPPEND=-2;
private static final int SUBMIT_MSG_NULL_ERROR=-4;
private static final int SUBMIT_MSG_FORMAT_ERROR=-5;
private static final int SUBMIT_MSG_TIME_OUT=-6;
private static final int DELIVER_MSG_FORMAT_REPORT_ERROR=-7;
private static final int DELIVER_MSG_NULL_ERROR=-8;
private static final int DELIVER_MSG_TIME_OUT=-9;
private static final int DELIVER_MSG_FORMAT_ERROR=-10;
private static final int DELIVER_MSG_FORMAT_DECODE_ERROR=-11;
private static final int CONNECT_MSG_NULL_ERROR=-12;
private static final int CONNECT_MSG_RESP_NOT_FOUNT_ERROR=-13;
private static final int CONNECT_MSG_FORMAT_ERROR=-14;
private static final int CONNECT_INIT_ERROR=-15;
private static final int CONNECT_HEAD_LEN = 12;
private static final int CONNECT_PACKET_LEN = 27;
private static final int QUERY_PACKET_LEN = 27;
private static final int COMMAND_CMPP_SUBMIT = 4;
private static final int COMMAND_CMPP_QUERY = 6;
private static final int COMMAND_CMPP_TERMINATE = 2;
private static final int COMMAND_CMPP_TERMINATE_RESP = 0x80000002;
private static final int COMMAND_CMPP_QUERY_RESP = 0x80000006;
private static final int COMMAND_CMPP_SUBMIT_RESP = 0x80000004;
private static final int COMMAND_CMPP_CONNECT = 1;
private static final int COMMAND_CMPP_CONNECT_RESP = 0x80000001;
private static final int COMMAND_CMPP_ACTIVE_TEST = 8;
private static final int COMMAND_CMPP_ACTIVE_TEST_REP = 0x80000008;
private static final int COMMAND_CMPP_DELIVER = 5;
private static final int COMMAND_CMPP_NACK_RESP = 0x80000000;
private static final int COMMAND_CMPP_DELIVER_RESP = 0x80000005;
private static final int COMMAND_CMPP_SET_KEY = 4098;
private static final int COMMAND_CMPP_SET_KEY_RESP = 0x80001002;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -