package org.xmx0632.deliciousfruit.utilities.sms;
import java.math.BigInteger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.wondertek.esmp.esms.empp.EMPPAnswer;
import com.wondertek.esmp.esms.empp.EMPPChangePassResp;
import com.wondertek.esmp.esms.empp.EMPPDeliver;
import com.wondertek.esmp.esms.empp.EMPPDeliverReport;
import com.wondertek.esmp.esms.empp.EMPPObject;
import com.wondertek.esmp.esms.empp.EMPPRecvListener;
import com.wondertek.esmp.esms.empp.EMPPReqNoticeResp;
import com.wondertek.esmp.esms.empp.EMPPSubmitSM;
import com.wondertek.esmp.esms.empp.EMPPSubmitSMResp;
import com.wondertek.esmp.esms.empp.EMPPSyncAddrBookResp;
import com.wondertek.esmp.esms.empp.EMPPTerminate;
import com.wondertek.esmp.esms.empp.EMPPUnAuthorization;
import com.wondertek.esmp.esms.empp.EmppApi;
public class ReceiveListener implements EMPPRecvListener {
private static Logger log = LoggerFactory.getLogger(ReceiveListener.class);
private static final long RECONNECT_TIME = 10 * 1000;
private EmppApi emppApi = null;
private int closedCount = 0;
protected ReceiveListener() {
}
public ReceiveListener(EmppApi emppApi) {
this.emppApi = emppApi;
}
// 处理接收到的消息
public void onMessage(EMPPObject message) {
if (message instanceof EMPPUnAuthorization) {
EMPPUnAuthorization unAuth = (EMPPUnAuthorization) message;
log.debug("客户端无权执行此操作 commandId=" + unAuth.getUnAuthCommandId());
return;
}
if (message instanceof EMPPSubmitSMResp) {
EMPPSubmitSMResp resp = (EMPPSubmitSMResp) message;
log.debug("收到sumbitResp:");
byte[] msgId = fiterBinaryZero(resp.getMsgId());
log.debug("msgId=" + new BigInteger(msgId));
log.debug("result=" + resp.getResult());
return;
}
if (message instanceof EMPPDeliver) {
EMPPDeliver deliver = (EMPPDeliver) message;
if (deliver.getRegister() == EMPPSubmitSM.EMPP_STATUSREPORT_TRUE) {
// 收到状态报告
EMPPDeliverReport report = deliver.getDeliverReport();
log.debug("收到状态报告:");
byte[] msgId = fiterBinaryZero(report.getMsgId());
log.debug("msgId=" + new BigInteger(msgId));
log.debug("status=" + report.getStat());
} else {
// 收到手机回复
log.debug("收到" + deliver.getSrcTermId() + "发送的短信");
log.debug("短信内容为:" + deliver.getMsgContent());
}
return;
}
if (message instanceof EMPPSyncAddrBookResp) {
EMPPSyncAddrBookResp resp = (EMPPSyncAddrBookResp) message;
if (resp.getResult() != EMPPSyncAddrBookResp.RESULT_OK)
log.debug("同步通讯录失败");
else {
log.debug("收到服务器发送的通讯录信息");
log.debug("通讯录类型为:" + resp.getAddrBookType());
log.debug(resp.getAddrBook());
}
}
if (message instanceof EMPPChangePassResp) {
EMPPChangePassResp resp = (EMPPChangePassResp) message;
if (resp.getResult() == EMPPChangePassResp.RESULT_VALIDATE_ERROR)
log.debug("更改密码:验证失败");
if (resp.getResult() == EMPPChangePassResp.RESULT_OK) {
log.debug("更改密码成功,新密码为:" + resp.getPassword());
emppApi.setPassword(resp.getPassword());
}
return;
}
if (message instanceof EMPPReqNoticeResp) {
EMPPReqNoticeResp response = (EMPPReqNoticeResp) message;
if (response.getResult() != EMPPReqNoticeResp.RESULT_OK)
log.debug("查询运营商发布信息失败");
else {
log.debug("收到运营商发布的信息");
log.debug(response.getNotice());
}
return;
}
if (message instanceof EMPPAnswer) {
log.debug("收到企业疑问解答");
EMPPAnswer answer = (EMPPAnswer) message;
log.debug(answer.getAnswer());
}
log.debug(message.toString());
}
// 处理连接断掉事件
public void OnClosed(Object object) {
// 该连接是被服务器主动断掉,不需要重连
if (object instanceof EMPPTerminate) {
log.debug("收到服务器发送的Terminate消息,连接终止");
return;
}
// 这里注意要将emppApi做为参数传入构造函数
ReceiveListener listener = new ReceiveListener(emppApi);
log.debug("连接断掉次数:" + (++closedCount));
for (int i = 1; !emppApi.isConnected(); i++) {
try {
log.debug("重连次数:" + i);
Thread.sleep(RECONNECT_TIME);
emppApi.reConnect(listener);
} catch (Exception e) {
e.printStackTrace();
}
}
log.debug("重连成功");
}
// 处理错误事件
public void OnError(Exception e) {
e.printStackTrace();
}
private static byte[] fiterBinaryZero(byte[] bytes) {
byte[] returnBytes = new byte[8];
for (int i = 0; i < 8; i++) {
returnBytes[i] = bytes[i];
}
return returnBytes;
}
}