package edu.sjtu.infosec.sms.service.impl.CMCC.old; import java.math.BigInteger; 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; /** * @author chensheng * * TODO 要更改此生成的类型注释的模板,请转至 * 窗口 - 首选项 - Java - 代码样式 - 代码模板 */ public class RecvListener implements EMPPRecvListener { private static final long RECONNECT_TIME = 10 * 1000; private EmppApi emppApi = null; private int closedCount = 0; protected RecvListener(){ } public RecvListener(EmppApi emppApi){ this.emppApi = emppApi; } // 处理接收到的消息 public void onMessage(EMPPObject message) { if(message instanceof EMPPUnAuthorization){ EMPPUnAuthorization unAuth=(EMPPUnAuthorization)message; System.out.println("客户端无权执行此操作 commandId="+unAuth.getUnAuthCommandId()); return; } if(message instanceof EMPPSubmitSMResp){ EMPPSubmitSMResp resp=(EMPPSubmitSMResp)message; System.out.println("收到sumbitResp:"); byte[] msgId=fiterBinaryZero(resp.getMsgId()); System.out.println("msgId="+new BigInteger(msgId)); System.out.println("result="+resp.getResult()); return; } if(message instanceof EMPPDeliver){ EMPPDeliver deliver = (EMPPDeliver)message; if(deliver.getRegister()==EMPPSubmitSM.EMPP_STATUSREPORT_TRUE){ //收到状态报告 EMPPDeliverReport report=deliver.getDeliverReport(); System.out.println("收到状态报告:"); byte[] msgId=fiterBinaryZero(report.getMsgId()); System.out.println("msgId="+new BigInteger(msgId)); System.out.println("status="+report.getStat()); }else{ //收到手机回复 System.out.println("收到"+deliver.getSrcTermId()+"发送的短信"); System.out.println("短信内容为:"+deliver.getMsgContent()); } return; } if(message instanceof EMPPSyncAddrBookResp){ EMPPSyncAddrBookResp resp=(EMPPSyncAddrBookResp)message; if(resp.getResult()!=EMPPSyncAddrBookResp.RESULT_OK) System.out.println("同步通讯录失败"); else{ System.out.println("收到服务器发送的通讯录信息"); System.out.println("通讯录类型为:"+resp.getAddrBookType()); System.out.println(resp.getAddrBook()); } } if(message instanceof EMPPChangePassResp){ EMPPChangePassResp resp=(EMPPChangePassResp)message; if(resp.getResult()==EMPPChangePassResp.RESULT_VALIDATE_ERROR) System.out.println("更改密码:验证失败"); if(resp.getResult()==EMPPChangePassResp.RESULT_OK) { System.out.println("更改密码成功,新密码为:"+resp.getPassword()); emppApi.setPassword(resp.getPassword()); } return; } if(message instanceof EMPPReqNoticeResp){ EMPPReqNoticeResp response=(EMPPReqNoticeResp)message; if(response.getResult()!=EMPPReqNoticeResp.RESULT_OK) System.out.println("查询运营商发布信息失败"); else{ System.out.println("收到运营商发布的信息"); System.out.println(response.getNotice()); } return; } if(message instanceof EMPPAnswer){ System.out.println("收到企业疑问解答"); EMPPAnswer answer=(EMPPAnswer)message; System.out.println(answer.getAnswer()); } System.out.println(message); } //处理连接断掉事件 public void OnClosed(Object object) { // 该连接是被服务器主动断掉,不需要重连 if(object instanceof EMPPTerminate){ System.out.println("收到服务器发送的Terminate消息,连接终止"); return; } //这里注意要将emppApi做为参数传入构造函数 RecvListener listener = new RecvListener(emppApi) ; System.out.println("连接断掉次数:"+(++closedCount)); for(int i = 1;!emppApi.isConnected();i++){ try { System.out.println("重连次数:"+i); Thread.sleep(RECONNECT_TIME); emppApi.reConnect(listener); }catch (Exception e) { e.printStackTrace(); } } System.out.println("重连成功"); } //处理错误事件 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; } }