From d7b5d0ccbbfd4a82d9af8c771a0f06bf895a09fe Mon Sep 17 00:00:00 2001 From: zhongchao Date: Tue, 8 Jun 2021 18:46:25 +0800 Subject: [PATCH] reset the mock upload location service code --- config.gradle | 1 + .../com/mogo/cloud/socket/SocketManager.java | 14 ++- gradle.properties | 2 +- modules/mogo-realtime/build.gradle | 1 + .../mogo/realtime/api/IRealTimeProvider.java | 18 ++++ .../realtime/core/SnapshotUploadInTime.java | 15 ++- .../realtime/core/UploadInTimeHandler.java | 101 ++++++++++++++++++ .../mogo/realtime/socket/SocketHandler.java | 16 +++ .../spi/RealTimeProviderDelegateManager.java | 34 ++++++ .../realtime/spi/RealTimeProviderImp.java | 46 ++++++++ 10 files changed, 242 insertions(+), 6 deletions(-) create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/api/IRealTimeProvider.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/core/UploadInTimeHandler.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/spi/RealTimeProviderDelegateManager.java create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/spi/RealTimeProviderImp.java diff --git a/config.gradle b/config.gradle index e90098e..c15491b 100644 --- a/config.gradle +++ b/config.gradle @@ -73,6 +73,7 @@ ext { googlezxing : "com.google.zxing:core:3.3.3", litezxing : "com.google.zxing:litezxing:1.0.29.8", cossdk : "com.zhidao.cosupload:cosuploadsdk:1.1.6", + spi : 'com.elegant.spi:api:1.0.9.1' //运行时spi库 ] diff --git a/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/SocketManager.java b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/SocketManager.java index bf3eb72..91454f0 100644 --- a/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/SocketManager.java +++ b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/SocketManager.java @@ -108,11 +108,10 @@ public class SocketManager implements IMogoCloudSocketManager { @Override public void sendMsg(String appId, int headerType, MsgBody body, IMogoCloudSocketMsgAckListener listener) { Logger.d(TAG, "sendMsg msgId : " + body.getMsgId()); - final byte[] pb = convertToPBBytes(body.getMsgType(), body.getContent()); if (cloudClientConfig.isThirdLogin()) { - ThirdSocketManager.getInstance().sendMsg(appId, pb, headerType, true, body.getMsgId()); + ThirdSocketManager.getInstance().sendMsg(appId, body.getContent(), headerType, true, body.getMsgId()); } else { - InternalSocketManager.getInstance().sendMsg(pb, headerType, true, body.getMsgId()); + InternalSocketManager.getInstance().sendMsg(body.getContent(), headerType, true, body.getMsgId()); } mAckListeners.put(body.getMsgId(), listener); } @@ -138,7 +137,7 @@ public class SocketManager implements IMogoCloudSocketManager { Class clz = listener.target(msgType); if ("SocketDownDataProto".equals(clz.getSimpleName())) { obj = SocketDownData.SocketDownDataProto.parseFrom(payload.getPayload()); - }else{ + } else { obj = GsonUtil.objectFromJson(payload.getPayload().toStringUtf8(), listener.target(msgType)); } } @@ -180,6 +179,13 @@ public class SocketManager implements IMogoCloudSocketManager { } } + /** + * 将byte数组转换成PB数据 + * + * @param msgType 消息类型 + * @param payloadBytes 原始数据 + * @return PB数据 + */ private byte[] convertToPBBytes(int msgType, byte[] payloadBytes) { MogoConnsvr.Payload payloadData = MogoConnsvr.Payload.newBuilder() .setMsgType(msgType) diff --git a/gradle.properties b/gradle.properties index 634a8dd..c609f54 100644 --- a/gradle.properties +++ b/gradle.properties @@ -27,7 +27,7 @@ SNAPSHOT_REPOSITORY_URL=http://nexus.zhidaoauto.com/repository/maven-snapshots/ USERNAME=xintai PASSWORD=xintai2018 # 编译模式: false - 依赖本地版本, true - 依赖 maven 版本 -RELEASE=true +RELEASE=false # AI CLOUD 云平台 # 工具类 MOGO_UTILS_VERSION=1.1.15 diff --git a/modules/mogo-realtime/build.gradle b/modules/mogo-realtime/build.gradle index ec7ea94..ed2364d 100644 --- a/modules/mogo-realtime/build.gradle +++ b/modules/mogo-realtime/build.gradle @@ -28,6 +28,7 @@ android { dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) + api rootProject.ext.dependencies.spi if (Boolean.valueOf(RELEASE)) { implementation "com.mogo.cloud:network:${MOGO_NETWORK_VERSION}" diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/api/IRealTimeProvider.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/api/IRealTimeProvider.java new file mode 100644 index 0000000..6250d57 --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/api/IRealTimeProvider.java @@ -0,0 +1,18 @@ +package com.mogo.realtime.api; + +/** + * 蘑菇AI云平台实时定位点上报服务接口 + */ +public interface IRealTimeProvider { + + /** + * 获取 adas 识别列表,由外部传入 + */ +// List getLastADASRecognizedResult(); // todo 数据实体替换成PB + + /** + * 发送消息,由外部传入ø + */ +// List getLocationMsg(); // todo 数据实体替换成PB + +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/SnapshotUploadInTime.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/SnapshotUploadInTime.java index dbf8aeb..61b354a 100644 --- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/SnapshotUploadInTime.java +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/SnapshotUploadInTime.java @@ -3,14 +3,18 @@ package com.mogo.realtime.core; import android.content.Context; import com.mogo.realtime.socket.SocketHandler; +import com.mogo.realtime.spi.RealTimeProviderImp; /** * 上报坐标服务 */ -public class SnapshotUploadInTime { +public class SnapshotUploadInTime implements UploadInTimeHandler.IUploadInTimeListener { private static volatile SnapshotUploadInTime sInstance; + private SnapshotUploadInTime() { + } + public static SnapshotUploadInTime getInstance() { if (sInstance == null) { synchronized (SnapshotUploadInTime.class) { @@ -31,15 +35,24 @@ public class SnapshotUploadInTime { public void start(Context context, String appId) { //开启长链服务 SocketHandler.getInstance().initSocket(context, appId); + //上传数据服务启动,定时上报 + UploadInTimeHandler.getInstance().start(); + UploadInTimeHandler.getInstance().setUploadInTimeListener(this); } /** * 停止实时定位数据上报 */ public void stop() { + //上传数据服务关闭 + UploadInTimeHandler.getInstance().stop(); //关闭长链服务 SocketHandler.getInstance().stop(); sInstance = null; } + @Override + public void sendLocationData() { +// SocketHandler.getInstance().sendMsg(); // todo 构建数据传输对象 + } } diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/UploadInTimeHandler.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/UploadInTimeHandler.java new file mode 100644 index 0000000..065a7ff --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/UploadInTimeHandler.java @@ -0,0 +1,101 @@ +package com.mogo.realtime.core; + +import android.os.Handler; +import android.os.HandlerThread; +import android.os.Message; +import android.support.annotation.Keep; + +import com.mogo.cloud.utils.logger.Logger; + +import static com.mogo.realtime.constant.RealTimeConstant.TAG; + +/** + * AI云 实时上报数据频率处理类 + */ +public class UploadInTimeHandler { + + private static final int MSG_DATA_CHANGED = 0x100; + private static final long MSG_DATA_INTERNAL = 50L; + private final long uploadDelay = MSG_DATA_INTERNAL; + + private volatile HandlerThread mThread; + private volatile Handler mHandler; + private static volatile UploadInTimeHandler uploadInTimeHandler; + + private IUploadInTimeListener iUploadInTimeListener; + + private UploadInTimeHandler() { + + } + + public static UploadInTimeHandler getInstance() { + if (uploadInTimeHandler == null) { + synchronized (UploadInTimeHandler.class) { + if (uploadInTimeHandler == null) { + uploadInTimeHandler = new UploadInTimeHandler(); + } + } + } + return uploadInTimeHandler; + } + + public synchronized void start() { + Logger.d(TAG, "UploadInTimeHandler start"); + if (mHandler == null) { + if (mThread == null) { + mThread = new HandlerThread(TAG); + Logger.d(TAG, "start Handler Thread"); + mThread.start(); + } + mHandler = new Handler(mThread.getLooper()) { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if (msg.what == MSG_DATA_CHANGED) { + mHandler.sendEmptyMessageDelayed(MSG_DATA_CHANGED, uploadDelay); + if (iUploadInTimeListener != null) { + iUploadInTimeListener.sendLocationData(); + } + } + } + }; + mHandler.sendEmptyMessage(MSG_DATA_CHANGED); + } + } + + public void setUploadInTimeListener(IUploadInTimeListener uploadInTimeListener) { + this.iUploadInTimeListener = uploadInTimeListener; + } + + public synchronized void stop() { + if (mHandler != null) { + mHandler.removeMessages(MSG_DATA_CHANGED); + mHandler = null; + } + if (mThread != null) { + try { + mThread.quit(); + } catch (Exception e) { + e.printStackTrace(); + } + mThread = null; + Logger.d(TAG, "stop Thread set null"); + } + iUploadInTimeListener = null; + uploadInTimeHandler = null; + } + + /** + * 实时上报数据回调 + */ + @Keep + public interface IUploadInTimeListener { + + /** + * 上报自车数据 + */ + @Keep + void sendLocationData(); + } + +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/socket/SocketHandler.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/socket/SocketHandler.java index e1015d4..de45cc6 100644 --- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/socket/SocketHandler.java +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/socket/SocketHandler.java @@ -4,6 +4,7 @@ import android.content.Context; import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener; import com.mogo.cloud.socket.SocketManager; +import com.mogo.cloud.socket.entity.MsgBody; import com.mogo.cloud.socket.entity.SocketDownData; import com.mogo.cloud.utils.logger.Logger; import com.zhidao.ptech.connsvr.protocol.MogoConnsvr; @@ -85,6 +86,21 @@ public class SocketHandler { } }; + /** + * 发送自车和ADAS数据 + * + * @param msgBody socket消息 + */ + public void sendMsg(MsgBody msgBody) { + SocketManager.getInstance().sendMsg(mAppId, HEADER_TYPE, msgBody, msgId -> { + for (IMogoCloudOnMsgListener listener : onMsgListenerList) { + if (listener != null) { + listener.onMsgSend(msgId); + } + } + }); + } + public void stop() { SocketManager.getInstance().unregisterOnMessageListener(HIGH_FREQUENCY_CHANNEL_ID, onMessageListener); SocketManager.getInstance().unregisterOnMessageListener(LOW_FREQUENCY_CHANNEL_ID, onMessageListener); diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/spi/RealTimeProviderDelegateManager.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/spi/RealTimeProviderDelegateManager.java new file mode 100644 index 0000000..dd9017b --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/spi/RealTimeProviderDelegateManager.java @@ -0,0 +1,34 @@ +package com.mogo.realtime.spi; + + +import com.elegant.spi.AbstractDelegateManager; +import com.mogo.cloud.passport.MoGoAiCloudClient; +import com.mogo.realtime.api.IRealTimeProvider; + +/** + * 提供RealTime SPI接口实例对象管理类 + */ +class RealTimeProviderDelegateManager extends AbstractDelegateManager { + private static RealTimeProviderDelegateManager sInstance = null; + private IRealTimeProvider mRealTimeProvider = null; + + public static RealTimeProviderDelegateManager getInstance() { + if (sInstance == null) { + synchronized (RealTimeProviderDelegateManager.class) { + if (sInstance == null) { + sInstance = new RealTimeProviderDelegateManager(); + } + } + } + return sInstance; + } + + public RealTimeProviderDelegateManager() { + loadDelegates(MoGoAiCloudClient.getInstance().getContext(), IRealTimeProvider.class, (unit, p) + -> mRealTimeProvider = p); + } + + public IRealTimeProvider getRealTimeProvider(){ + return mRealTimeProvider; + } +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/spi/RealTimeProviderImp.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/spi/RealTimeProviderImp.java new file mode 100644 index 0000000..273a1ee --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/spi/RealTimeProviderImp.java @@ -0,0 +1,46 @@ +package com.mogo.realtime.spi; + +import com.mogo.realtime.api.IRealTimeProvider; + +import java.util.List; + +/** + * RealTime Provider SPI 单例对象 + */ +public class RealTimeProviderImp implements IRealTimeProvider { + + private static volatile RealTimeProviderImp sInstance = null; + private final IRealTimeProvider mDelegate; + + public static RealTimeProviderImp getInstance() { + if (sInstance == null) { + synchronized (RealTimeProviderImp.class) { + if (sInstance == null) { + sInstance = new RealTimeProviderImp(); + } + } + } + return sInstance; + } + + public RealTimeProviderImp() { + mDelegate = RealTimeProviderDelegateManager.getInstance().getRealTimeProvider(); + } + +// @Override +// public List getLastADASRecognizedResult() { // todo 数据实体替换成PB +// if (mDelegate != null) { +// return mDelegate.getLastADASRecognizedResult(); +// } +// return null; +// } +// +// @Override +// public List getLocationMsg() { // todo 数据实体替换成PB +// if (mDelegate != null) { +// mDelegate.getLocationMsg(); +// } +// return null; +// } + +}