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; } }