📄 receiver.java
字号:
package com.gctech.cmpp3.client;
import java.io.IOException;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import org.apache.log4j.Logger;
import com.gctech.cmpp3.msg.CommandID;
import com.gctech.cmpp3.msg.DeliverRequest;
import com.gctech.cmpp3.msg.DeliverResponse;
import com.gctech.cmpp3.msg.SubmitResponse;
import com.gctech.cmpp3.util.MsgLogger;
import com.gctech.util.Tools;
public class Receiver implements Runnable{
protected void processDeliver(DeliverRequest dlv){}
protected void processSubmitRes(SubmitResponse resp){}
public Receiver() {
}
private CmppCommunicator commu;
public void setCommunicator(CmppCommunicator commu){
this.commu = commu;
}
//读取数据,放入不同队列
public void run(){
logger.debug("begin receiver data!");
while (true){
try {
//除了数据长度的数据
byte[] data = commu.receive();
//没有数据,休眠1秒钟
if ( data == null ){
Thread.sleep(500L);
continue;
}
int commandId = Tools.byte2int(data);
switch ( commandId ){
//上行,状态报告消息,放入队列
case CommandID.CMPP_DELIVER:
DeliverRequest dlv = new DeliverRequest();
dlv.fromByteArray(data);
MsgLogger.log(dlv);
//回复信息
DeliverResponse dlvResp = new DeliverResponse();
dlvResp.setSequence(dlv);
dlvResp.setMsgId(dlv.getMsgId());
dlvResp.printHead();
commu.send(dlvResp.toByteArray());
System.out.println("response "+dlv);
//处理消息
this.processDeliver(dlv);
break;
case CommandID.CMPP_SUBMIT_RESP:
//下行回复,增加到返回列表。
SubmitResponse resp = new SubmitResponse();
System.out.println("response data:"+Tools.byteArrayToHexString(data));
resp.fromByteArray(data);
//打印下行回复小心
MsgLogger.log(resp);
this.processSubmitRes(resp);
break;
case CommandID.CMPP_ACTIVE_TEST_RESP:
//检测信息,直接回复
int seq = Tools.byte2int(data, 4);
MsgLogger.log("收到检测包:"+seq);
break;
default:
logger.warn("can't find the command Id:"+commandId+"!");
break;
}
}catch(SocketTimeoutException sock){
logger.debug("waiting for data!");
try {
Thread.sleep(500L);
}
catch (InterruptedException ex1) {
logger.error(ex1, ex1);
}
}catch (SocketException se){
//重新连接网关。
se.printStackTrace();
try {
commu.relogin();
}
catch (IOException ex2) {
logger.error(ex2, ex2);
try {
Thread.sleep(3000L);
}
catch (InterruptedException ex3) {
logger.error(ex3, ex3);
}
}
}catch (Throwable ex) {
logger.error(ex, ex);
try {
Thread.sleep(1000L);
}
catch (InterruptedException ex1) {
logger.error(ex1, ex1);
}
}finally{
}
}
}
static final Logger logger = Logger.getLogger(Receiver.class);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -