From 7d10603da62917b11878d0a7e89007032e614379 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Wed, 31 Jan 2024 16:23:34 +0800 Subject: [PATCH] =?UTF-8?q?[shuttle=5Fp]=20[=E8=B7=9D=E7=A6=BB=E7=AE=97?= =?UTF-8?q?=E6=B3=95=E5=8D=87=E7=BA=A7=E3=80=81=E4=BB=A3=E7=A0=81=E6=95=B4?= =?UTF-8?q?=E7=90=86]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../passenger/model/PM2DrivingModel.kt | 310 +++++------------- .../passenger/network/PM2ModelLoopManager.kt | 127 ------- 2 files changed, 73 insertions(+), 364 deletions(-) delete mode 100644 OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/network/PM2ModelLoopManager.kt diff --git a/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/model/PM2DrivingModel.kt b/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/model/PM2DrivingModel.kt index ee8f705ac9..1adc4bd9a0 100644 --- a/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/model/PM2DrivingModel.kt +++ b/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/model/PM2DrivingModel.kt @@ -16,18 +16,15 @@ import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener -import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener import com.mogo.eagle.core.function.api.telematic.IReceivedMsgListener import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager -import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicListenerManager import com.mogo.eagle.core.function.call.telematic.CallerTelematicManager.sendMsgToServer import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.eagle.core.utilcode.util.CoordinateUtils import com.mogo.eagle.core.utilcode.util.GsonUtils import com.mogo.eagle.core.utilcode.util.NetworkUtils import com.mogo.eagle.core.utilcode.util.StringUtils @@ -36,9 +33,11 @@ import com.mogo.och.common.module.bean.dpmsg.* import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager.pushAppOperationalMsgBox import com.mogo.och.common.module.biz.constant.OchCommonConst import com.mogo.och.common.module.biz.network.OchCommonServiceCallback -import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil +import com.mogo.och.common.module.manager.distancemamager.IDistanceListener +import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager +import com.mogo.och.common.module.manager.loopmanager.BizLoopManager +import com.mogo.och.common.module.manager.loopmanager.LoopInfo import com.mogo.och.common.module.utils.DateTimeUtil -import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.common.module.voice.VoiceNotice.showNotice import com.mogo.och.data.bean.BusRoutesResult import com.mogo.och.data.bean.BusStationBean @@ -49,10 +48,8 @@ import com.mogo.och.shuttle.passenger.bean.response.PassengerRoutesResponse import com.mogo.och.shuttle.passenger.callback.AutoPilotStatusCallback import com.mogo.och.shuttle.passenger.callback.DrivingInfoCallback import com.mogo.och.shuttle.passenger.constant.BusPassengerConst -import com.mogo.och.shuttle.passenger.network.PM2ModelLoopManager import com.mogo.och.shuttle.passenger.network.PassengerServiceManager -import io.reactivex.disposables.Disposable -import mogo.telematics.pad.MessagePad +import io.reactivex.schedulers.Schedulers import kotlin.math.abs /** @@ -62,29 +59,19 @@ import kotlin.math.abs class PM2DrivingModel private constructor() { private var mContext: Context? = null - private var mLocation: MogoLocation? = null - private var mRoutePoints = mutableListOf() private var routesResult: BusRoutesResult? = null - private var mCurrentAutoStatus = -1 var mStations = mutableListOf() private var mNextStationIndex = 0 // A-B要到达站的index private var isGoingToNextStation = false //是否前往下一站过程中 - private var mTwoStationsRouts = mutableListOf() - private var mPreRouteIndex = 0 - private var mWipePreIndex = 0 - private var mDrivingInfoCallback: DrivingInfoCallback? = null //行程信息 private var mAutoStatusCallback: AutoPilotStatusCallback? = null //自动驾驶状态 private var operationStatus: PassengerOperationStatusResponse.Result? = null - @Volatile - private var globalPathTruncation: Disposable? = null - private val handler = Handler(Handler.Callback { msg -> if (msg.what == MSG_QUERY_BUS_P_STATION) { queryDriverOperationStatus() @@ -101,12 +88,12 @@ class PM2DrivingModel private constructor() { } } - fun init(context : Context){ + fun init(context: Context) { mContext = context initListener() queryDriverByLocalDriver() queryDriverOperationStatus() - startOrStopOrderLoop(true) + BizLoopManager.setLoopFunction(TAG, LoopInfo(2,::queryDriverSiteByCoordinate, scheduler = Schedulers.io())) } private fun queryDriverByLocalDriver() { @@ -120,16 +107,16 @@ class PM2DrivingModel private constructor() { CallerAutoPilotStatusListenerManager.addListener(TAG, mAutoPilotStatusListener) // 定位监听 - CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10,mMapLocationListener) + CallerChassisLocationGCJ02ListenerManager.addListener(TAG, 10, mMapLocationListener) //司乘屏通信监听 - CallerTelematicListenerManager.addListener(TAG,mReceivedMsgListener) - - //自动驾驶轨迹监听 - CallerPlanningRottingListenerManager.addListener(TAG, moGoAutopilotPlanningListener) + CallerTelematicListenerManager.addListener(TAG, mReceivedMsgListener) //网络监听 - IntentManager.getInstance().registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener) + IntentManager.getInstance() + .registerIntentListener(ConnectivityManager.CONNECTIVITY_ACTION, mNetWorkIntentListener) + + TrajectoryAndDistanceManager.addDistanceListener(TAG, trajectoryListener) } @@ -140,7 +127,7 @@ class PM2DrivingModel private constructor() { ) } - fun releaseListener(){ + fun releaseListener() { //自动驾驶状态监听 CallerAutoPilotStatusListenerManager.removeListener(TAG) @@ -149,8 +136,10 @@ class PM2DrivingModel private constructor() { CallerTelematicListenerManager.removeListener(TAG) - //自动驾驶轨迹监听 - CallerPlanningRottingListenerManager.removeListener(TAG) + cleanStation("release") + + TrajectoryAndDistanceManager.removeListener(TAG) + } fun setDrivingInfoCallback(drivingInfoCallback : DrivingInfoCallback?){ @@ -216,15 +205,43 @@ class PM2DrivingModel private constructor() { } } + private val trajectoryListener: IDistanceListener = object : IDistanceListener { + override fun distanceCallback(distance: Float) { + val lastTime = distance / BusPassengerConst.BUS_AVERAGE_SPEED * 3.6 //秒 + d(SceneConstant.M_BUS_P + TAG, "轨迹排查==lastSumLength = $distance") + if (routesResult != null) { + for (site in routesResult!!.sites) { + if (site.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && !site.isLeaving) { + return + } + } + } + // 小于200m 播报站点介绍 + if (distance < 200) { + val stationNext = mStations[mNextStationIndex] + if (!stationNext.isPlayTts) { + if (!StringUtils.isEmpty(stationNext.introduction)) { + showNotice(stationNext.introduction) + stationNext.isPlayTts = true + } + } + } + mDrivingInfoCallback?.updateRemainMT( + distance.toLong(), + lastTime.toLong() + ) + } + } + @RequiresApi(Build.VERSION_CODES.O) private fun speakTTS(msg: String) { - var mAudioManager = mContext?.getSystemService(Context.AUDIO_SERVICE) as AudioManager - var mAudioAttributes = AudioAttributes.Builder() + val mAudioManager = mContext?.getSystemService(Context.AUDIO_SERVICE) as AudioManager + val mAudioAttributes = AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) //设置声音的用途 .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) //设置声音的类型 .build() - var mAudioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK) //设置焦点类型 + val mAudioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK) //设置焦点类型 .setAudioAttributes(mAudioAttributes) //设置声音属性 .setAcceptsDelayedFocusGain(false) //设置接受延迟获取焦点,需要设置OnAudioFocusChangeListener来监听焦点的获取 .build() @@ -249,50 +266,10 @@ class PM2DrivingModel private constructor() { object : IMoGoChassisLocationGCJ02Listener{ override fun onChassisLocationGCJ02(mogoLocation: MogoLocation?) { if (null == mogoLocation) return - mLocation = mogoLocation updateSpeed(mogoLocation) } } - private val moGoAutopilotPlanningListener = object : IMoGoPlanningRottingListener{ - - @Synchronized - override fun onAutopilotRotting(globalPathResp: MessagePad.GlobalPathResp?) { - d(SceneConstant.M_BUS_P + TAG, "och-rotting==globalPathResp = " + GsonUtils.toJson(globalPathResp)) - globalPathResp?.let { - d(SceneConstant.M_BUS_P + TAG, "och-rotting==wayPointsSize = " + it.wayPointsList.size) - - if (globalPathTruncation != null && !globalPathTruncation!!.isDisposed) { - d(SceneConstant.M_BUS_P + TAG, "1s内不可以接受轨迹") - return@let - } - - globalPathTruncation = RxUtils.createSubscribe(1_000) { - d(SceneConstant.M_BUS_P + TAG, "可以接受轨迹") - } - d(SceneConstant.M_BUS_P + TAG, "接受轨迹中") - it.wayPointsList?.let {list-> - updateRoutePoints(list) - } - } - } - - } - - @Synchronized - fun updateRoutePoints(routePoints: List) { - mRoutePoints.clear() - val latLngModels = CoordinateCalculateRouteUtil - .coordinateConverterWgsToGcjLocations(mContext, routePoints) - d(SceneConstant.M_BUS_P + TAG, "och-rotting==latLngModels = " + latLngModels.size) - mRoutePoints.addAll(latLngModels) - - if (isGoingToNextStation){ - mTwoStationsRouts.clear() - startRemainRouteInfo() - } - } - private fun updateSpeed(mogoLocation: MogoLocation) { // km/h val speedKM = (abs(mogoLocation.gnssSpeed) * 3.6f).toInt() @@ -407,6 +384,7 @@ class PM2DrivingModel private constructor() { d(SceneConstant.M_BUS_P+TAG, "queryDriverSiteByCoordinate = %s", msg) if (code == 1003){ queryDriverOperationDelay() + cleanStation("queryDriverSiteByCoordinate 1003") } if (PassengerServiceManager.driverAppSn.isEmpty()){ return @@ -414,7 +392,6 @@ class PM2DrivingModel private constructor() { if (code == 1003) { routesResult = null isGoingToNextStation = false - startOrStopCalculateRouteInfo(false) return } } @@ -424,11 +401,10 @@ class PM2DrivingModel private constructor() { } private fun updateLocalOrder(){ - mRoutePoints.clear() routesResult = null mNextStationIndex = 0 + cleanStation("queryDriverSiteByCoordinate") isGoingToNextStation = false - startOrStopCalculateRouteInfo(false) mDrivingInfoCallback?.showNoTaskView(true) } @@ -460,20 +436,20 @@ class PM2DrivingModel private constructor() { && station.isLeaving && i + 1 < stations.size) { mDrivingInfoCallback?.updateStationsInfo(stations as MutableList, i + 1, false) d(SceneConstant.M_BUS_P+TAG,"och-rotting--mNextStationIndex = $mNextStationIndex , i = $i") -// if (mNextStationIndex != i + 1) { - d(SceneConstant.M_BUS_P+TAG,"och-rotting--start ") - mTwoStationsRouts.clear() - startRemainRouteInfo() -// } + d(SceneConstant.M_BUS_P+TAG,"och-rotting--start ") isGoingToNextStation = true mNextStationIndex = i + 1 + val startStation = mStations[i] + val endStation = mStations[i + 1] + setTrajectoryStation(startStation, endStation, result.lineId) return } else if (station.drivingStatus == BusPassengerConst.STATION_STATUS_STOPPED && !station.isLeaving) { d(SceneConstant.M_BUS_P+TAG,"och-rotting--mNextStationIndex = $mNextStationIndex , i = $i") d(SceneConstant.M_BUS_P+TAG,"och-rotting--arrived ") - mPreRouteIndex = 0 + if (i == stations.size - 1) { + cleanStation("updatePassengerRouteInfo最后一个站点") + } isGoingToNextStation = false - startOrStopCalculateRouteInfo(false) mDrivingInfoCallback?.updateStationsInfo(stations as MutableList, i, true) return }else{ @@ -484,162 +460,22 @@ class PM2DrivingModel private constructor() { } - fun loopRouteAndWipe(){ - if (mRoutePoints != null && mRoutePoints.size > 0 && mLocation != null) { - val haveArrivedIndex = CoordinateCalculateRouteUtil - .getArrivedPointIndexNew( - mWipePreIndex, - mRoutePoints, - mLocation!! - ) - mWipePreIndex = haveArrivedIndex - d(SceneConstant.M_BUS_P + TAG, - "thread = " + Thread.currentThread().name + " haveArrivedIndex== " + haveArrivedIndex - ) -// if (mAutopilotPlanningCallback != null) { -// val routePoints = CoordinateCalculateRouteUtil -// .coordinateConverterLocationToLatLng(mContext, mRoutePoints) -// mAutopilotPlanningCallback.routeResult(routePoints, haveArrivedIndex) -// } - } + private fun setTrajectoryStation( + startStationInfo: BusStationBean, + endStationInfo: BusStationBean, + lineId: Int + ) { + val startStation = MogoLocation() + startStation.longitude = startStationInfo.gcjLon + startStation.latitude = startStationInfo.gcjLat + val endStation = MogoLocation() + endStation.longitude = endStationInfo.gcjLon + endStation.latitude = endStationInfo.gcjLat + TrajectoryAndDistanceManager.setStationPoint(startStation, endStation, lineId.toLong()) } - private fun startRemainRouteInfo() { - //开启实时计算剩余距离,剩余时间,预计时间 - startOrStopCalculateRouteInfo(true) - } - - fun dynamicCalculateRouteInfo(){ - //计算当前位置和下一站的剩余点集合 - //计算剩余点总里程和时间 - d(SceneConstant.M_BUS_P + TAG, "och-rotting==mTwoStationsRouts.size() = " + mTwoStationsRouts.size) - //计算当前位置和下一站的剩余点集合 - //计算剩余点总里程和时间 - if (mTwoStationsRouts.size == 0) { - calculateTwoStationsRoute() - } - - if (mTwoStationsRouts.size > 0 && mLocation != null) { - val lastPointsMap = CoordinateCalculateRouteUtil - .getRemainPointListByCompareNew(mPreRouteIndex, mTwoStationsRouts, mLocation!!) - for (index in lastPointsMap.keys) { - mPreRouteIndex = index - break - } - for (lastPoints in lastPointsMap.values) { - d(SceneConstant.M_BUS_P + TAG, "och-rotting==lastPoints.size() = " + lastPoints.size) - var lastSumLength = 0f - lastSumLength = if (lastPoints.size == 1) { //只是最后一个点,计算当前位置和最后一个点的距离 - if (mNextStationIndex <= mStations.size - 1 && mNextStationIndex >= 0) { - val stationNext: BusStationBean = mStations[mNextStationIndex] - CoordinateUtils.calculateLineDistance( - stationNext.gcjLon, stationNext.gcjLat, - mLocation!!.longitude, mLocation!!.latitude - ) - } else { - CoordinateUtils.calculateLineDistance( - lastPoints[0].longitude, lastPoints[0].latitude, - mLocation!!.longitude, mLocation!!.latitude - ) - } - } else { - CoordinateCalculateRouteUtil.calculateRouteSumLength(lastPoints) - } - val lastTime = lastSumLength / BusPassengerConst.SHUTTLE_AVERAGE_SPEED * 3.6 //秒 - d(SceneConstant.M_BUS_P + TAG, "och-rotting==lastSumLength = $lastSumLength") - - // 小于200m 播报站点介绍 - // 小于200m 播报站点介绍 - if (lastSumLength < 200) { - val stationNext = mStations[mNextStationIndex] - if (!stationNext.isPlayTts) { - if (!StringUtils.isEmpty(stationNext.introduction)) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - speakTTS(stationNext.introduction) - } - stationNext.isPlayTts = true - } - } - } - - mDrivingInfoCallback?.updateRemainMT( - lastSumLength.toLong(), - lastTime.toLong() - ) - } - } - } - - private fun calculateTwoStationsRoute() { - //找出前往站对应的轨迹点,拿出两站点的集合 - d(SceneConstant.M_BUS_P + TAG, "mRoutePoints.size() = " + mRoutePoints.size) - if (mRoutePoints.size > 0) { - if (mStations.size > 1) { //两个站点及以上要计算两个站点间的轨迹路线 - if (mNextStationIndex <= mStations.size - 1 && mNextStationIndex - 1 >= 0) { - mTwoStationsRouts.clear() - val stationNext: BusStationBean = mStations[mNextStationIndex] - val stationCur: BusStationBean = mStations[mNextStationIndex - 1] - //当前站在轨迹中对应的点 - val currentRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndexNew( - 0, mRoutePoints, stationCur.gcjLon, stationCur.gcjLat - ) - //要前往的站在轨迹中对应的点 - val nextRouteIndex = CoordinateCalculateRouteUtil.getArrivedPointIndexNew( - currentRouteIndex, - mRoutePoints, - stationNext.gcjLon, - stationNext.gcjLat - ) - - d(SceneConstant.M_BUS_P + TAG, "och-rotting==currentRouteIndex = " + currentRouteIndex - + ", nextRouteIndex = " + nextRouteIndex) - - if (currentRouteIndex < nextRouteIndex) { //如果找到的next在起点的轨迹前面,直接舍弃这个轨迹,不显示 - mTwoStationsRouts.addAll( - mRoutePoints.subList( - currentRouteIndex, - nextRouteIndex + 1 - ) - ) - } - } - } - } - } - - /** - * 开始轮询计算剩余里程和时间 - * @param isStart - */ - fun startOrStopCalculateRouteInfo(isStart: Boolean) { - d(SceneConstant.M_BUS_P+TAG, "startOrStopCalculateRouteInfo() $isStart") - if (isStart) { - PM2ModelLoopManager.startCalculateRouteInfoLoop() - } else { - mTwoStationsRouts.clear() - PM2ModelLoopManager.stopCalculateRouteInfLoop() - } - } - - /** - * 实时轨迹擦除 - * @param isStart - */ - private fun startOrStopRouteAndWipe(isStart: Boolean) { - if (isStart) { - PM2ModelLoopManager.startOrStopRouteAndWipe() - } else { - mWipePreIndex = 0 - PM2ModelLoopManager.stopOrStopRouteAndWipe() - } - } - - private fun startOrStopOrderLoop(start: Boolean) { - d(SceneConstant.M_BUS_P + TAG, "startOrStopOrderLoop() $start") - if (start) { - PM2ModelLoopManager.startQueryDriverLineLoop() - } else { - PM2ModelLoopManager.stopQueryDriverLineLoop() - } + private fun cleanStation(type: String) { + d(SceneConstant.M_BUS_P + TAG, "清理站点:$type") + TrajectoryAndDistanceManager.setStationPoint(null, null, -1L) } } \ No newline at end of file diff --git a/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/network/PM2ModelLoopManager.kt b/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/network/PM2ModelLoopManager.kt deleted file mode 100644 index 8f3082bce1..0000000000 --- a/OCH/shuttle/passenger/src/main/java/m2/com/mogo/och/shuttle/passenger/network/PM2ModelLoopManager.kt +++ /dev/null @@ -1,127 +0,0 @@ -package com.mogo.och.shuttle.passenger.network - -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.i -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.och.shuttle.passenger.constant.BusPassengerConst -import com.mogo.och.shuttle.passenger.model.PM2DrivingModel -import io.reactivex.Observable -import io.reactivex.ObservableOnSubscribe -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.disposables.CompositeDisposable -import io.reactivex.disposables.Disposable -import io.reactivex.schedulers.Schedulers -import java.util.concurrent.TimeUnit - -/** - * @author: wangmingjun - * @date: 2023/2/1 - */ -object PM2ModelLoopManager { - - private val TAG: String = PM2ModelLoopManager::class.java.getSimpleName() - - private var mQueryLineDisposable: Disposable? = null //心跳轮询 - private var mRouteWipeDisposable: CompositeDisposable? = null //估计擦除 - private var mCalculateRouteDisposable: CompositeDisposable? = null //每隔2s计算一次剩余里程和时间 - - - fun startOrStopRouteAndWipe() { - i(SceneConstant.M_BUS_P + TAG, "startOrStopRouteWipe()") - if (mRouteWipeDisposable != null) return - if (mRouteWipeDisposable == null) { - mRouteWipeDisposable = CompositeDisposable() - } - val disposable = startLoopRouteAndWipe() - .doOnSubscribe { } - .doOnError { } - .delay( - BusPassengerConst.LOOP_LINE_1S, - TimeUnit.MILLISECONDS, - true - ) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。 - .subscribeOn(Schedulers.io()) - .repeat() // repeat保证请求成功后能够重新订阅。 - .retry() // retry保证请求失败后能重新订阅 - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { } - mRouteWipeDisposable!!.add(disposable) - } - - fun stopOrStopRouteAndWipe() { - if (mRouteWipeDisposable != null) { - mRouteWipeDisposable!!.dispose() - mRouteWipeDisposable = null - } - } - - fun startQueryDriverLineLoop() { - if (mQueryLineDisposable != null && !mQueryLineDisposable!!.isDisposed) { - return - } - i(SceneConstant.M_BUS_P + TAG, "startQueryDriverLineLoop()") - mQueryLineDisposable = Observable.interval( - BusPassengerConst.LOOP_DELAY, - BusPassengerConst.LOOP_LINE_2S, TimeUnit.MILLISECONDS - ) - .map { aLong: Long -> aLong + 1 } - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { aLong: Long? -> - PM2DrivingModel.INSTANCE.queryDriverSiteByCoordinate() - } - } - - fun stopQueryDriverLineLoop() { - if (mQueryLineDisposable != null) { - i(SceneConstant.M_BUS_P + TAG, "stopQueryDriverLineLoop()") - mQueryLineDisposable!!.dispose() - mQueryLineDisposable = null - } - } - - fun startCalculateRouteInfoLoop() { - i(SceneConstant.M_BUS_P + TAG, "startCalculateRouteInfoLoop()") - if (mCalculateRouteDisposable != null) return - if (mCalculateRouteDisposable == null) { - mCalculateRouteDisposable = CompositeDisposable() - } - val disposable = startLoopCalculateRouteInfo() - .doOnSubscribe { } - .doOnError { } - .delay( - BusPassengerConst.LOOP_LINE_2S, - TimeUnit.MILLISECONDS, - true - ) // 设置delayError为true,表示出现错误的时候也需要延迟5s进行通知,达到无论是请求正常还是请求失败,都是5s后重新订阅,即重新请求。 - .subscribeOn(Schedulers.io()) - .repeat() // repeat保证请求成功后能够重新订阅。 - .retry() // retry保证请求失败后能重新订阅 - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { } - mCalculateRouteDisposable!!.add(disposable) - } - - fun stopCalculateRouteInfLoop() { - if (mCalculateRouteDisposable != null) { - i(SceneConstant.M_BUS_P + TAG, "stopCalculateRouteInfLoop()") - mCalculateRouteDisposable!!.dispose() - mCalculateRouteDisposable = null - } - } - - private fun startLoopRouteAndWipe(): Observable { - return Observable.create(ObservableOnSubscribe { emitter -> - if (emitter.isDisposed) return@ObservableOnSubscribe - PM2DrivingModel.INSTANCE.loopRouteAndWipe() - emitter.onComplete() - }) - } - - private fun startLoopCalculateRouteInfo(): Observable { - return Observable.create(ObservableOnSubscribe { emitter -> - if (emitter.isDisposed) return@ObservableOnSubscribe - PM2DrivingModel.INSTANCE.dynamicCalculateRouteInfo() - emitter.onComplete() - }) - } -} \ No newline at end of file