makcar/app/src/main/java/com/aros/apron/manager/DockOpenManager.java

133 lines
5.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.aros.apron.manager;
import android.os.Handler;
import android.os.Looper;
import com.aros.apron.base.BaseManager;
import com.aros.apron.constant.AMSConfig;
import com.aros.apron.constant.Constant;
import com.aros.apron.entity.ApronExecutionStatus;
import com.aros.apron.entity.MessageEvent;
import com.aros.apron.entity.MessageReply;
import com.aros.apron.entity.Movement;
import com.aros.apron.tools.LogUtil;
import com.aros.apron.tools.MqttManager;
import com.google.gson.Gson;
import org.eclipse.paho.client.mqttv3.IMqttActionListener;
import org.eclipse.paho.client.mqttv3.IMqttToken;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import java.nio.charset.StandardCharsets;
import java.util.UUID;
public class DockOpenManager extends BaseManager {
private final int maxRetries = 20;
private int sendDockOpenSuccessTimes;
private boolean isSendDockOpenSuccess;
private DockOpenManager() {
}
private static class DockOpenHolder {
private static final DockOpenManager INSTANCE = new DockOpenManager();
}
public static DockOpenManager getInstance() {
return DockOpenHolder.INSTANCE;
}
public void resetState() {
sendDockOpenSuccessTimes = 0;
isSendDockOpenSuccess = false;
LogUtil.log(TAG, "开舱状态已重置");
}
public void sendDockOpenMsg2Server() {
if (sendDockOpenSuccessTimes >= maxRetries) {
LogUtil.log(TAG, "达到最大重试次数或已发送开舱"+isSendDockOpenSuccess+sendDockOpenSuccessTimes);
return;
}
try {
if (MqttManager.getInstance().mqttAndroidClient.isConnected()) {
sendDockOpenMessage();
} else {
handleNotConnected();
}
} catch (Exception e) {
LogUtil.log(TAG, "开舱发送异常:" + e.toString());
e.printStackTrace();
}
}
private void sendDockOpenMessage(){
try {
if (MqttManager.getInstance().mqttAndroidClient.isConnected()) {
MessageEvent messageEvent = new MessageEvent();
messageEvent.setBid(UUID.randomUUID().toString());
messageEvent.setTid(UUID.randomUUID().toString());
messageEvent.setTimestamp(System.currentTimeMillis());
messageEvent.setMethod(Constant.OPEN_DOOR);
MessageEvent.Data data=new MessageEvent.Data();
MqttMessage mqttMessage = new MqttMessage(new Gson().toJson(messageEvent).getBytes(StandardCharsets.UTF_8));
mqttMessage.setQos(1);
MqttManager.getInstance().mqttAndroidClient.publish(AMSConfig.UP_UAV_EVENT, mqttMessage, null, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
sendEvent2Server("AMS通知机库开舱",1);
mainHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (ApronExecutionStatus.getInstance().isServerReplyDockOpen()) {
isSendDockOpenSuccess = true;
LogUtil.log(TAG, "已经收到服务端响应开门");
} else {
if (Movement.getInstance().isPlaneWing()&&Movement.getInstance().getElevation()>40){
LogUtil.log(TAG, "未收到收到服务端响应开门,重新发送");
retrySend();
}else{
LogUtil.log(TAG,"飞机状态不满足开舱门条件:"+Movement.getInstance().isPlaneWing()+"--"+Movement.getInstance().getElevation());
}
}
}
}, 2000);
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
LogUtil.log(TAG, "开舱发送回调失败:" + exception.toString());
retrySend();
}
});
} else {
LogUtil.log(TAG, "开舱发送回调失败mqtt 未连接");
}
} catch (Exception e) {
e.printStackTrace();
LogUtil.log(TAG, "开舱发送异常:" + e.toString());
}
}
final Handler mainHandler = new Handler(Looper.getMainLooper());
private void retrySend() {
sendDockOpenSuccessTimes++;
if (sendDockOpenSuccessTimes < maxRetries) {
mainHandler.postDelayed(() -> sendDockOpenMsg2Server(), 2000);
} else {
LogUtil.log(TAG, "达到最大重试次数,开舱发送失败:" + sendDockOpenSuccessTimes);
}
}
private void handleNotConnected() {
if (!isSendDockOpenSuccess && sendDockOpenSuccessTimes < maxRetries) {
sendDockOpenSuccessTimes++;
mainHandler.postDelayed(() -> sendDockOpenMsg2Server(), 2000);
LogUtil.log(TAG, "开舱发送失败mqtt未连接" + sendDockOpenSuccessTimes);
} else {
LogUtil.log(TAG, "开舱发送失败:" + sendDockOpenSuccessTimes);
}
}
}