📄 cmppmtreceivethread.java
字号:
package com.zhanghao.cmpp;
/**
* <p>Title: CMPPMTReceiveThread 双端口连接方式-MT的收线程</p>
* <p>Description: 湖南移动短信网关通讯程序</p>
* <p>接收CMPP_SUBMIT_RESP, CMPP_ACTIVE_TEST_RESP,CMPP_QUERY_RESP等包</p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: sunun tech ltd.</p>
* @author zhanghao
* @version 1.0
*/
import java.io.*;
import java.net.*;
import com.zhanghao.common.util.*;
public class CMPPMTReceiveThread extends Thread{
/** 该线程运行标志 true 在运行,false停止 **/
public static boolean isAvail = false;
private static DataInputStream inputStream;
private static DataOutputStream outputStream;
/** 初始化构造器
* 使用CMPPMTSocketProcess唯一的实例的输入流和输出流**/
public CMPPMTReceiveThread() {
inputStream = CMPPMTSocketProcess.getInstance().inputStream;
outputStream = CMPPMTSocketProcess.getInstance().outputStream;
isAvail = true;
}
public void run(){
Debug.outInfo("[CMPPMaster]"+PublicFunction.getFormatTime()+" MT连接("+CMPParameter.MTServerPort+")->接收线程启动 ...");
while(CMPPMTSocketProcess.getInstance().isAvail && isAvail){
try{
byte[] recByte = PublicFunction.recv(inputStream);
CMPP deliverMsg = new CMPP();
deliverMsg.parsePack(recByte);
switch(deliverMsg.Command_Id){
case CMPP.CMPP_DELIVER:
//将Deliver消息保存在接收缓冲中,由CMPPMOSocketProcess的CMPPMODataSaveThread
//线程将MO数据保存在数据库中
synchronized(CMPPDBAccess.getInstance().vctMOData){
CMPPDBAccess.getInstance().vctMOData.addElement(deliverMsg);
}
CMPP deliverRespMsg = new CMPP(CMPP.CMPP_DELIVER_RESP);
deliverRespMsg.Msg_Id = deliverMsg.Msg_Id;
deliverRespMsg.Result = 0;
PublicFunction.send(outputStream, deliverRespMsg.pack());
break;
case CMPP.CMPP_ACTIVE_TEST_RESP:
//链路测试回应包
break;
case CMPP.CMPP_SUBMIT_RESP:
if(deliverMsg.Result == 0){
//发送成功的,只打印消息,不做日志
System.out.println("[CMPPMaster]"+PublicFunction.getFormatTime()+" <MT Resp>"+" MsgId="+deliverMsg.Msg_Id+" SequenceID="+deliverMsg.Sequence_Id+" 发送成功");
}
else{
Debug.outInfo("[CMPPMaster]"+PublicFunction.getFormatTime()+" <MT Resp>"+" MsgId="+deliverMsg.Msg_Id+" SequenceID="+deliverMsg.Sequence_Id+" 发送失败,status="+deliverMsg.Result);
}
//处理成功下发的响应信息
//CMPPDBAccess.getInstance().dealProccessMsg(deliverMsg);
//2005-08-29修改,提高回应消息的保存速度
synchronized(CMPPDBAccess.getInstance().vctRespMsg){
CMPPDBAccess.getInstance().vctRespMsg.addElement(deliverMsg);
}
break;
}
}
catch(Exception ex){
destory(ex);
}
}
//退出线程后
}
/** 销毁线程 **/
public void destory(Exception ex){
Debug.outInfo("[CMPP]MT连接(收)线程异常停止,异常原因:" + ex.getMessage());
CMPPMTSocketProcess.getInstance().disclose();
this.isAvail = false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -