\r
//服务器收到AP03 会返回BP03,如果PB03 规定时间没收到,则认为发送心跳失败,需要重发,\r
private boolean is_heartBeat_send_success=false;\r
+ private boolean is_login_send_success=false;\r
//如果重试5次还没有连接上,则需要重新断开连接重新连接服务器。\r
private int hearBeatResendCount=0;\r
private int MaxHeartbeatResendTime=6;\r
//每次retry发送心跳的间隔为20秒\r
private int heartBeatRetryTimeout=20;\r
+\r
//监测 心跳服务器响应的timer\r
private ScheduledThreadPoolExecutor scheduled = null;\r
private Runnable CheckSrvResponseTimerTask=new Runnable() {\r
//更新系统的IMEI\r
boolean ret=DeviceInfoUtil.updateImei(mRuntime);\r
ICLogger.i("Update IMEI "+ret);\r
- connection.send(protocolAPIHelper.genStringMessage("heart", protocolAPIHelper.getHeartbeatMSG(mRuntime)));\r
+ if (is_login_send_success)\r
+ connection.send(protocolAPIHelper.genStringMessage("heart", protocolAPIHelper.getHeartbeatMSG(mRuntime)));\r
+ else\r
+ connection.send(protocolAPIHelper.genStringMessage("heart", protocolAPIHelper.getLoginMSG(mRuntime)));\r
+\r
}\r
}\r
\r
boolean ret=DeviceInfoUtil.updateImei(paramRuntime);\r
ICLogger.i("Update IMEI "+ret);\r
//发送登录包\r
+ is_login_send_success=false;\r
Observable.timer(500L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
public void call(Long param1Long) {\r
connection.send(protocolAPIHelper.genStringMessage("AP00",protocolAPIHelper.getLoginMSG(paramRuntime)));\r
\r
}\r
});\r
- //心跳开始发送的时候,先重置response检测标志\r
- is_heartBeat_send_success=false;\r
- //发送心跳包\r
- Observable.timer(3500L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
- public void call(Long param1Long) {\r
- //这时重新连接服务器才进行的连接,理论上close已经设置false,此次可以认为协议定然断开,所以设置为false作为双重保险。\r
- mRuntime.setServerProtocolConnected(false);\r
- connection.send(protocolAPIHelper.genStringMessage("heart",protocolAPIHelper.getHeartbeatMSG(paramRuntime)));\r
- //发送完心跳后,开始检查服务器响应\r
- startResponseCheckTimer();\r
- }\r
- });\r
+\r
\r
\r
isConnected = true;\r
\r
// LauncherCtrl.getInstance(this.mContext).setStatusBarIcon("server_connected", STATUS_BAR_STATE_SERVER_CONNECTED_ON);\r
// Deliver.triggerSendThread(); //链接上就尝试清除 buffer中的数据\r
- CoreService.getInstance().stopConnectionRetryTimer();\r
+\r
if (CoreService.needLocateInAfterHeartBeat==true){\r
//第一次启动或者系统Close后重连的时候,重置LocationCycle\r
CoreService.needLocateInAfterHeartBeat=false;\r
}else if (paramStringMessage.cmd().equals("BP00")) {\r
//广播服务器连接成功的消息\r
paramRuntime.getContextProxy().sendBroadcastServerConnectionChanged(true);\r
+ //登录包收到就停止重链接服务器\r
+ CoreService.getInstance().stopConnectionRetryTimer();\r
+ is_login_send_success=true;\r
+ //收到登录包反馈后再发送心跳\r
+\r
+ //心跳开始发送的时候,先重置response检测标志\r
+ is_heartBeat_send_success=false;\r
+ //发送心跳包\r
+ Observable.timer(3500L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+ public void call(Long param1Long) {\r
+ //这时重新连接服务器才进行的连接,理论上close已经设置false,此次可以认为协议定然断开,所以设置为false作为双重保险。\r
+ mRuntime.setServerProtocolConnected(false);\r
+ connection.send(protocolAPIHelper.genStringMessage("heart",protocolAPIHelper.getHeartbeatMSG(paramRuntime)));\r
+ //发送完心跳后,开始检查服务器响应\r
+ startResponseCheckTimer();\r
+ }\r
+ });\r
+\r
}\r
return false;\r
}\r