From ba175c7290ef623ef7db3f5d6e9e55b57ef1e297 Mon Sep 17 00:00:00 2001 From: wangmingjun Date: Fri, 2 Dec 2022 18:13:36 +0800 Subject: [PATCH] =?UTF-8?q?[2.13.0]=20taxi/bus=E5=8F=B8=E6=9C=BA=E7=AB=AF?= =?UTF-8?q?=20=E5=AE=9A=E4=BD=8D=E6=9D=83=E9=99=90=EF=BC=8C=E9=95=BF?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E5=BC=82=E5=B8=B8=EF=BC=8C=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=AE=9A=E6=97=B6=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/och/bus/model/BusOrderModel.java | 5 + .../manager/AbnormalFactorsLoopManager.kt | 93 +++++++++++++++++++ .../com/mogo/och/taxi/model/TaxiModel.java | 6 ++ 3 files changed, 104 insertions(+) create mode 100644 OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/AbnormalFactorsLoopManager.kt diff --git a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java index 0ec34d7ce4..0b1eb2c647 100644 --- a/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java +++ b/OCH/mogo-och-bus/src/main/java/com/mogo/och/bus/model/BusOrderModel.java @@ -59,6 +59,7 @@ import com.mogo.och.common.module.biz.constant.OchCommonConst; import com.mogo.och.common.module.biz.network.OchCommonServiceCallback; import com.mogo.och.common.module.biz.provider.LoginService; import com.mogo.och.common.module.callback.OchAdasStartFailureCallback; +import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager; import com.mogo.och.common.module.manager.OCHAdasAbilityManager; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.common.module.utils.DateTimeUtil; @@ -166,6 +167,8 @@ public class BusOrderModel { OCHSocketMessageManager.INSTANCE.getMsgWriteOffPassengerType(), mWriteOffPassengeOnMessageListener); + AbnormalFactorsLoopManager.INSTANCE.startLoopAbnormalFactors(mContext); + //2022.1.28 // 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃 // The exception could not be delivered to the consumer because it has already canceled/disposed @@ -343,6 +346,8 @@ public class BusOrderModel { OCHSocketMessageManager.INSTANCE.getMsgMonitorType()); OCHSocketMessageManager.INSTANCE.releaseSocketMessageListener( OCHSocketMessageManager.INSTANCE.getMsgWriteOffPassengerType()); + + AbnormalFactorsLoopManager.INSTANCE.stopLoopAbnormalFactors(); } private Object readResolve() { diff --git a/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/AbnormalFactorsLoopManager.kt b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/AbnormalFactorsLoopManager.kt new file mode 100644 index 0000000000..a3df02bf62 --- /dev/null +++ b/OCH/mogo-och-common-module/src/main/java/com/mogo/och/common/module/manager/AbnormalFactorsLoopManager.kt @@ -0,0 +1,93 @@ +package com.mogo.och.common.module.manager + +import android.Manifest +import android.content.Context +import com.mogo.commons.module.status.IMogoStatusChangedListener +import com.mogo.commons.module.status.MogoStatusManager +import com.mogo.commons.module.status.StatusDescriptor +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i +import com.mogo.eagle.core.utilcode.util.NetworkUtils +import com.mogo.eagle.core.utilcode.util.ToastUtils +import com.mogo.och.common.module.utils.PermissionUtil +import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers +import java.util.concurrent.TimeUnit + +/** + * @author: wangmingjun + * @date: 2022/12/2 + */ +object AbnormalFactorsLoopManager : IMogoStatusChangedListener { + + const val TAG = "AbnormalFactorsLoopManager" + + private const val LOOP_TIME = 10 *1000L + private const val LOOP_DELAY = 5 * 1000L + private var socketStatus: Boolean = false + + private var looperDisposable : Disposable? = null + + fun startLoopAbnormalFactors(context: Context){ + if (looperDisposable != null && !looperDisposable!!.isDisposed){ + return + } + i(TAG, "startLoopAbnormalFactors()") + looperDisposable = Observable.interval(LOOP_DELAY, LOOP_TIME, TimeUnit.MILLISECONDS) + .map { aLong -> aLong+1 } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe{ aLong -> checkAbnormalFactors(context)} + + //长链接监听 + MogoStatusManager.getInstance().registerStatusChangedListener(TAG, + StatusDescriptor.CLOUD_SOCKET,this) + } + + private fun checkAbnormalFactors(context: Context) { + + var locationStatusPermsStatus = false + var networkStatus = false + + //定位权限 + locationStatusPermsStatus = !(!PermissionUtil.isLocServiceEnable(context) || !PermissionUtil.checkPermission( + context, *arrayOf( + Manifest.permission.ACCESS_FINE_LOCATION + ) + )) + + //网络状态或者网络权限是否打开 + if (NetworkUtils.isConnected(context)){ + networkStatus = true + } + //长链接状态 socketStatus + + var toastStr = "" + if (!locationStatusPermsStatus) toastStr += "定位服务异常 " + if (!networkStatus) toastStr += " 网络异常 " + if (!socketStatus) toastStr += " 长链接异常 " + + i(TAG, "abnormal_factors_Str = $toastStr") + + if (toastStr !== ""){ + ToastUtils.showLong(toastStr + "请开启相应权限或者查看网络") + } + } + + + fun stopLoopAbnormalFactors(){ + looperDisposable!!.dispose() + looperDisposable == null + + MogoStatusManager.getInstance().unregisterStatusChangedListener(TAG, + StatusDescriptor.CLOUD_SOCKET,this) + } + + override fun onStatusChanged(descriptor: StatusDescriptor?, isTrue: Boolean) { + //长链接监听、 + if (StatusDescriptor.CLOUD_SOCKET == descriptor && isTrue){ + socketStatus = isTrue + } + } +} \ No newline at end of file diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java index 07579d98ca..6184a1c946 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/model/TaxiModel.java @@ -46,6 +46,7 @@ import com.mogo.och.common.module.biz.constant.OchCommonConst; import com.mogo.och.common.module.biz.network.OchCommonServiceCallback; import com.mogo.och.common.module.biz.provider.LoginService; import com.mogo.och.common.module.callback.OchAdasStartFailureCallback; +import com.mogo.och.common.module.manager.AbnormalFactorsLoopManager; import com.mogo.och.common.module.manager.OCHAdasAbilityManager; import com.mogo.och.common.module.map.AmapNaviToDestinationModel; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; @@ -233,6 +234,9 @@ public class TaxiModel { OCHSocketMessageManager.INSTANCE.registerSocketMessageListener( OCHSocketMessageManager.INSTANCE.getMsgMonitorType(), mMogoOnMessageListener); + + AbnormalFactorsLoopManager.INSTANCE.startLoopAbnormalFactors(mContext); + } private final IMogoOnMessageListener mMogoOnMessageListener = @@ -265,6 +269,8 @@ public class TaxiModel { CallerAutoPilotStatusListenerManager.INSTANCE.removeListener(mGoAutopilotStatusListener); CallerAutopilotPlanningListenerManager.INSTANCE.removeListener(moGoAutopilotPlanningListener); OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(null); + + AbnormalFactorsLoopManager.INSTANCE.stopLoopAbnormalFactors(); } public void startOrStopOrderLoop(boolean start) {