From 831e7ec43c1c0aa9b11606ad5f4c2d36c2f17041 Mon Sep 17 00:00:00 2001 From: lianglihui Date: Thu, 22 Jul 2021 14:49:59 +0800 Subject: [PATCH] =?UTF-8?q?och=5Ftaxi=20=E5=8D=87=E7=BA=A7socket=E9=95=BF?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/och/taxi/MogoOCHTaxiModel.java | 152 ++++++++++++------ .../com/mogo/och/taxi/ui/OCHTaxiFragment.java | 7 +- build.gradle | 6 +- .../socket/MogoAiCloudSocketManager.java | 56 ++++++- gradle.properties | 16 +- .../connection/IMogoLifecycleListener.java | 9 ++ .../connection/IMogoSocketManager.java | 3 + 7 files changed, 181 insertions(+), 68 deletions(-) create mode 100644 services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoLifecycleListener.java diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java index 1ded643d76..77d1f26193 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/MogoOCHTaxiModel.java @@ -17,6 +17,7 @@ import com.mogo.och.taxi.ui.OCHTaxiUiController; import com.mogo.service.adas.IMogoAdasOCHCallback; import com.mogo.service.adas.RemoteControlAutoPilotParameters; import com.mogo.service.adas.entity.AdasOCHData; +import com.mogo.service.connection.IMogoLifecycleListener; import com.mogo.service.connection.IMogoOnMessageListener; import com.mogo.service.intent.IMogoIntentListener; import com.mogo.utils.NetworkUtils; @@ -78,6 +79,7 @@ class MogoOCHTaxiModel { private Context mContext; private OCHTaxiOrderResponse mCurrentOCHOrder; private OCHArriveNotifyCallback mNotifyCallback; + private OCHSocketLifeCycleLisnter mSocketLifeCycleLisnter; private IMogoCarLocationChangedListener2 mCarLocationChangedListener2; /** * 是否达到起始站点 @@ -125,6 +127,10 @@ class MogoOCHTaxiModel { .getApis() .getSocketManagerApi( context ) .registerOnMessageListener( 401019, mOrderStatusMsgListener = new OrderStatusMsgListener() ); + MogoApisHandler.getInstance() + .getApis() + .getSocketManagerApi(context) + .registerLifecycleListener(10010,mSocketLifeCycleLisnter = new OCHSocketLifeCycleLisnter()); MogoApisHandler.getInstance() .getApis() .getAdasControllerApi() @@ -153,13 +159,6 @@ class MogoOCHTaxiModel { mOCHRHCarstatus = data.data.status == 1 ? 1:0; - if (mOCHRHCarstatus == 1){ - timeLoop(); - }else { - if (mDisposable != null ){ - mDisposable.dispose(); - } - } //更新view OCHTaxiUiController.getInstance().onOperationChanged(mOCHRHCarstatus==1); //刷新数据 @@ -193,40 +192,9 @@ class MogoOCHTaxiModel { private void restoreOrderInfo() { Logger.d( TAG, "重新查询订单状态" ); mRetryCounter = 0; -// if ( mCurrentOCHOrder == null ) { -// // 订单恢复 -// String orderInfo = SharedPrefsMgr.getInstance( mContext ).getString( SP_KEY_OCH_TAXI_ORDER ); -// Logger.d(TAG,"restoreOrderInfo:"+orderInfo); -// if ( !TextUtils.isEmpty( orderInfo ) ) { -// mCurrentOCHOrder = GsonUtil.objectFromJson( orderInfo, OCHTaxiOrderResponse.class ); -// } -// } -// query2RestoreOrderStatus(mCurrentOCHOrder == null ? null : mCurrentOCHOrder.orderNo); query2RestoreOrderStatus(null); } -// private void restoreOrderInfo_() { -// Logger.d( TAG, "重新查询订单状态" ); -// mRetryCounter = 0; -// if ( mCurrentOCHOrder == null ) { -// // 订单恢复 -// String orderInfo = SharedPrefsMgr.getInstance( mContext ).getString( SP_KEY_OCH_TAXI_ORDER ); -// if ( !TextUtils.isEmpty( orderInfo ) ) { -// mCurrentOCHOrder = GsonUtil.objectFromJson( orderInfo, OCHTaxiOrderResponse.class ); -// if ( mCurrentOCHOrder == null ) { -// // 解决本地没有缓存订单号的问题 -// query2RestoreOrderStatus( null ); -// } else { -// query2RestoreOrderStatus( mCurrentOCHOrder.orderNo ); -// } -// } else { -// // 解决本地没有缓存订单号的问题 -// query2RestoreOrderStatus( null ); -// } -// } else { -// query2RestoreOrderStatus( mCurrentOCHOrder.orderNo ); -// } -// } /** * 查询订单状态,来恢复旧订单(因crash导致应用重启、断网没收到推送等)状态 *

@@ -320,6 +288,58 @@ class MogoOCHTaxiModel { } ); } + /** + * 用于长连接 + * @param orderNo + */ + private void querryOrderStatusForMakeUp( String orderNo ) { + Logger.e(TAG,"querryOrderStatusForMakeUp:"+orderNo); + queryOCHOrderStatus( orderNo, new OCHOrderStatusCallback< OCHTaxiOrderResponse2 >() { + @Override + public void onSuccess( OCHTaxiOrderResponse2 data ) { + Logger.d( TAG, "querryOrderStatusForMakeUp:"+ data.toString()); + if ( data == null || data.data == null) { + Logger.d( TAG, "订单已取消或已完成" ); + clearCurrentOCHOrder(); + OCHTaxiUiController.getInstance().onOrderStatusChanged(OCHOrderStatus.None.getCode()); + return; + } + convertCurrentOrder( data ); + OCHOrderStatus status = OCHOrderStatus.valueOf( data.data.orderDispatchType ); + switch ( status ) { + case JourneyCompleted: + TipToast.shortTip( mContext.getString( R.string.module_och_taxi_order_completed ) ); + OCHTaxiUiController.getInstance().onOrderStatusChanged(data.data.orderDispatchType); + clearCurrentOCHOrder(); + break; + case Cancel: + TipToast.shortTip( mContext.getString( R.string.module_och_taxi_order_cancel ) ); + OCHTaxiUiController.getInstance().onOrderStatusChanged(data.data.orderDispatchType); + clearCurrentOCHOrder(); + break; + case OnTheWayToStartStation: + default: + mIsArriveAtStartStation = false; + mIsArriveAtEndStation = false; + mIsOnTheWay2EndStation = false; + OCHTaxiUiController.getInstance().onOrderStatusChanged(data.data.orderDispatchType); + mOrderMsgListener.onMsgReceived( mCurrentOCHOrder ); + break; + } + } + + @Override + public void onError() { + + } + + @Override + public void onFail() { + Logger.w( TAG, "查询订单失败" ); + } + } ); + } + /** * 将查询到的订单转换成推送的订单数据,目前两者数据结构不一样 * @@ -405,8 +425,6 @@ class MogoOCHTaxiModel { super.onSuccess(o); Logger.d(TAG,"OCHCarStatusResponse:"+o.data.status); mOCHRHCarstatus = o.data.status; -// mIsWork = mOCHRHCarstatus.status == 1; -// mOCHRHCarstatus.status = status; OCHTaxiUiController.getInstance().onOperationChanged(mOCHRHCarstatus == 1); updateData(mOCHRHCarstatus); Logger.d(TAG,"changeCarStatus:"+status); @@ -525,14 +543,6 @@ class MogoOCHTaxiModel { return mIsArriveAtEndStation; } -// /** -// * 用户是否达到上车站点 -// * -// * @return -// */ -// public boolean isUserArriveAtStartStation() { -// return mIsUserArriveAtStartStation; -// } /** * 设置去往终点状态 @@ -583,7 +593,6 @@ class MogoOCHTaxiModel { if ( !isArriveAtStartStation() ) { registerCarLocationListener(); } -// OCHTaxiUiController.getInstance().addFragment(); OCHTaxiUiController.getInstance().onOrderStatusChanged(mCurrentOCHOrder.orderDispatchType); } } @@ -624,6 +633,13 @@ class MogoOCHTaxiModel { .unregisterCarLocationChangedListener( TAG, mCarLocationChangedListener2 ); } + public void unregisterSocketListener(){ + MogoApisHandler.getInstance() + .getApis() + .getSocketManagerApi(mContext) + .unregisterLifecycleListener(10010); + } + /** * 后端长链推送通知订单状态被改变 */ @@ -648,12 +664,10 @@ class MogoOCHTaxiModel { switch ( status ) { case Cancel: clearCurrentOCHOrder(); -// OCHTaxiUiController.getInstance().removeFragment(); OCHTaxiUiController.getInstance().onOrderStatusChanged(status.getCode()); break; case UserArriveAtStartStation: mIsArriveAtStartStation = true; -// mIsUserArriveAtStartStation = true; OCHTaxiUiController.getInstance().onUserArriveAtStartStation(); break; default: @@ -663,6 +677,38 @@ class MogoOCHTaxiModel { } } + private class OCHSocketLifeCycleLisnter implements IMogoLifecycleListener { + + @Override + public void onConnectFailure() { + Logger.e(TAG,"socket onConnectFailure"); + } + + @Override + public void onConnectSuccess() { + Logger.e(TAG,"socket onConnectSuccess"); + stopSocketMakeUp(); + } + + @Override + public void onConnectLost() { + Logger.e(TAG,"socket onConnectLost"); + startSocketMakeUp(); + } + } + + public void startSocketMakeUp(){ + if (mOCHRHCarstatus == 1){ + timeLoop(); + } + } + + public void stopSocketMakeUp(){ + if (mDisposable != null){ + mDisposable.dispose(); + } + } + /** * 自动驾驶本地通知订单到站 */ @@ -853,7 +899,7 @@ class MogoOCHTaxiModel { } } - private static final int PERIOD = 3 * 1000; + private static final int PERIOD = 1 * 1000; private static final int DELAY = 100; private Disposable mDisposable; /** @@ -864,6 +910,6 @@ class MogoOCHTaxiModel { .map((aLong -> aLong + 1)) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> query2RestoreOrderStatus(null)); + .subscribe(aLong -> querryOrderStatusForMakeUp(null)); } } diff --git a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java index 34dea5c9c6..b7e177fb3f 100644 --- a/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java +++ b/OCH/mogo-och-taxi/src/main/java/com/mogo/och/taxi/ui/OCHTaxiFragment.java @@ -232,7 +232,7 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i @Override public void onSuccess( Object data ) { Logger.d( TAG, "更新状态成功" ); -// onOrderStatusChanged(OCHOrderStatus.ArriveAtEndStation.getCode()); + onOrderStatusChanged(OCHOrderStatus.ArriveAtEndStation.getCode()); } @Override @@ -279,6 +279,7 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i .getRegisterCenterApi() .unregisterCarLocationChangedListener( TAG, this ); MogoOCHTaxiModel.getInstance().unregisterCarLocationListener(); + MogoOCHTaxiModel.getInstance().unregisterSocketListener(); mLocation = null; } @@ -296,7 +297,7 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i Logger.d( TAG, "更新状态成功" ); MogoOCHTaxiModel.getInstance().clearCurrentOCHOrder(); MogoOCHTaxiModel.getInstance().cancelAutopilot(); -// OCHTaxiUiController.getInstance().onOrderStatusChanged(0); + OCHTaxiUiController.getInstance().onOrderStatusChanged(0); } @Override @@ -336,7 +337,7 @@ class OCHTaxiFragment extends BaseOchFragment< OCHTaxiView, OCHTaxiPresenter > i @Override public void onSuccess( Object data ) { Logger.d( TAG, "更新状态成功" ); -// onOrderStatusChanged(OCHOrderStatus.OnTheWayToEndStation.getCode()); + onOrderStatusChanged(OCHOrderStatus.OnTheWayToEndStation.getCode()); } @Override diff --git a/build.gradle b/build.gradle index eae2a8b0ee..7f4a78dd55 100644 --- a/build.gradle +++ b/build.gradle @@ -4,13 +4,13 @@ apply from: "javadoc.gradle" buildscript { repositories { - maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } + maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' } maven { url 'https://maven.aliyun.com/repository/public' } maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } maven { url 'https://maven.aliyun.com/repository/jcenter' } - maven { url 'http://nexus.zhidaoauto.com/repository/maven-releases/' } - maven { url 'http://nexus.zhidaoauto.com/repository/maven-public/' } + maven { url 'https://nexus.zhidaoauto.com/repository/maven-releases/' } + maven { url 'https://nexus.zhidaoauto.com/repository/maven-public/' } google() } dependencies { diff --git a/foudations/mogo-aicloud-services-apk/src/main/java/com/mogo/aicloud/services/socket/MogoAiCloudSocketManager.java b/foudations/mogo-aicloud-services-apk/src/main/java/com/mogo/aicloud/services/socket/MogoAiCloudSocketManager.java index 8ed63e49e4..96c6d75427 100644 --- a/foudations/mogo-aicloud-services-apk/src/main/java/com/mogo/aicloud/services/socket/MogoAiCloudSocketManager.java +++ b/foudations/mogo-aicloud-services-apk/src/main/java/com/mogo/aicloud/services/socket/MogoAiCloudSocketManager.java @@ -8,11 +8,13 @@ import com.mogo.cloud.socket.IMogoCloudSocketMsgAckListener; import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener; import com.mogo.cloud.socket.SocketManager; import com.mogo.cloud.socket.entity.MsgBody; +import com.mogo.service.connection.IMogoLifecycleListener; import com.mogo.service.connection.IMogoMsgAckListener; import com.mogo.service.connection.IMogoOnMessageListener; import com.mogo.service.connection.IMogoSocketManager; import com.mogo.utils.logger.Logger; import com.zhidao.ptech.connsvr.commom.protocol.MogoCommon; +import com.zhidao.socket.ConnectionLifecycleListener; import java.util.ArrayList; import java.util.List; @@ -26,7 +28,7 @@ import java.util.concurrent.ConcurrentHashMap; * 长链实现:基于 netty */ @Keep -public class MogoAiCloudSocketManager implements IMogoSocketManager { +public class MogoAiCloudSocketManager extends ConnectionLifecycleListener implements IMogoSocketManager { private static final String TAG = "MogoAiCloudSocketManager-apk"; @@ -54,6 +56,7 @@ public class MogoAiCloudSocketManager implements IMogoSocketManager { * key - msgType */ private final Map> mListeners = new ConcurrentHashMap<>(); + private final Map mLifeCycleListeners = new ConcurrentHashMap<>(); /** * 管理消息回执 @@ -101,6 +104,24 @@ public class MogoAiCloudSocketManager implements IMogoSocketManager { SocketManager.getInstance().unregisterOnMessageListener(msgType, mogoCloudSocketOnMessageListener); } + @Override + public void registerLifecycleListener(int msgType, IMogoLifecycleListener listener) { + if (mLifeCycleListeners.containsKey(msgType)) { + return; + } + if (!mLifeCycleListeners.containsKey(msgType)) { + mLifeCycleListeners.put(msgType, listener); + } + } + + @Override + public void unregisterLifecycleListener(int msgType) { + if (!mLifeCycleListeners.containsKey(msgType)) { + return; + } + mLifeCycleListeners.remove(msgType); + } + @Override public void sendMsg(MsgBody body, IMogoMsgAckListener listener) { Logger.d(TAG, "sendMsg."); @@ -150,4 +171,37 @@ public class MogoAiCloudSocketManager implements IMogoSocketManager { } } }; + + @Override + public void onConnectSuccess() { + if (mLifeCycleListeners.size() > 0){ + for (IMogoLifecycleListener lifecycleListener : mLifeCycleListeners.values()){ + if (lifecycleListener != null){ + lifecycleListener.onConnectSuccess(); + } + } + } + } + + @Override + public void onConnectFailure() { + if (mLifeCycleListeners.size() > 0){ + for (IMogoLifecycleListener lifecycleListener : mLifeCycleListeners.values()){ + if (lifecycleListener != null){ + lifecycleListener.onConnectFailure(); + } + } + } + } + + @Override + public void onConnectLost(boolean reconnect) { + if (mLifeCycleListeners.size() > 0){ + for (IMogoLifecycleListener lifecycleListener : mLifeCycleListeners.values()){ + if (lifecycleListener != null){ + lifecycleListener.onConnectLost(); + } + } + } + } } diff --git a/gradle.properties b/gradle.properties index 9996fc0ae4..8b08b76621 100644 --- a/gradle.properties +++ b/gradle.properties @@ -158,21 +158,21 @@ LOGLIB_VERSION = 1.0.4 ######## MogoAiCloudSDK Version # 网络请求 -MOGO_NETWORK_VERSION=1.1.21 +MOGO_NETWORK_VERSION=1.1.24 # 鉴权 -MOGO_PASSPORT_VERSION=1.1.21 +MOGO_PASSPORT_VERSION=1.1.24 # 常链接 -MOGO_SOCKET_VERSION=1.1.21 +MOGO_SOCKET_VERSION=1.1.24 # 数据采集 -MOGO_REALTIME_VERSION=1.1.21 +MOGO_REALTIME_VERSION=1.1.24 # 探路,道路事件发布,获取 -MOGO_TANLU_VERSION=1.1.21 +MOGO_TANLU_VERSION=1.1.24 # 直播推流 -MOGO_LIVE_VERSION=1.1.21 +MOGO_LIVE_VERSION=1.1.24 # 直播拉流 -MOGO_TRAFFICLIVE_VERSION=1.1.21 +MOGO_TRAFFICLIVE_VERSION=1.1.24 # 定位服务 -MOGO_LOCATION_VERSION=1.1.21 +MOGO_LOCATION_VERSION=1.1.24 ######## Foundation MogoAiCloud Module diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoLifecycleListener.java b/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoLifecycleListener.java new file mode 100644 index 0000000000..a65ddee335 --- /dev/null +++ b/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoLifecycleListener.java @@ -0,0 +1,9 @@ +package com.mogo.service.connection; + +public interface IMogoLifecycleListener { + void onConnectFailure(); + + void onConnectSuccess(); + + void onConnectLost(); +} diff --git a/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoSocketManager.java b/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoSocketManager.java index a07f749aff..bcb4ed51a9 100644 --- a/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoSocketManager.java +++ b/services/mogo-service-api/src/main/java/com/mogo/service/connection/IMogoSocketManager.java @@ -45,6 +45,9 @@ public interface IMogoSocketManager extends IProvider { */ void unregisterOnMessageListener( int msgType, IMogoOnMessageListener listener ); + + void registerLifecycleListener(int msgType,IMogoLifecycleListener listener); + void unregisterLifecycleListener(int msgType); /** * 发送消息 *