och_taxi 升级socket长连接版本

This commit is contained in:
lianglihui
2021-07-22 14:49:59 +08:00
parent a1137e3352
commit 831e7ec43c
7 changed files with 181 additions and 68 deletions

View File

@@ -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导致应用重启、断网没收到推送等状态
* <p>
@@ -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));
}
}

View File

@@ -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

View File

@@ -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 {

View File

@@ -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<Integer, List<IMogoOnMessageListener>> mListeners = new ConcurrentHashMap<>();
private final Map<Integer, IMogoLifecycleListener> 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();
}
}
}
}
}

View File

@@ -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

View File

@@ -0,0 +1,9 @@
package com.mogo.service.connection;
public interface IMogoLifecycleListener {
void onConnectFailure();
void onConnectSuccess();
void onConnectLost();
}

View File

@@ -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);
/**
* 发送消息
*