From f8baf1282febbfeaefed8e3e0064422d894e3f88 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Sat, 20 Feb 2021 16:43:58 +0800 Subject: [PATCH 1/4] changed the ack --- .idea/dictionaries/zhongchao.xml | 7 +++ .../java/com/mogo/cloud/MoGoApplication.java | 2 + .../com/mogo/cloud/SPIRealTimeTestClass.java | 1 + .../passport/MoGoAiCloudClientConfig.java | 23 +++++++ gradle.properties | 2 +- .../realtime/entity/ADASRecognizedResult.java | 12 ++++ .../mogo/realtime/entity/FrequencyData.java | 63 +++++++++++++++++++ .../mogo/realtime/entity/LocationResult.java | 7 +++ .../mogo/realtime/socket/SocketHandler.java | 59 +++++++---------- 9 files changed, 139 insertions(+), 37 deletions(-) create mode 100644 .idea/dictionaries/zhongchao.xml create mode 100644 modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/FrequencyData.java diff --git a/.idea/dictionaries/zhongchao.xml b/.idea/dictionaries/zhongchao.xml new file mode 100644 index 0000000..572eacf --- /dev/null +++ b/.idea/dictionaries/zhongchao.xml @@ -0,0 +1,7 @@ + + + + mogo + + + \ No newline at end of file diff --git a/app/src/main/java/com/mogo/cloud/MoGoApplication.java b/app/src/main/java/com/mogo/cloud/MoGoApplication.java index da24f05..bf4a2fe 100644 --- a/app/src/main/java/com/mogo/cloud/MoGoApplication.java +++ b/app/src/main/java/com/mogo/cloud/MoGoApplication.java @@ -49,6 +49,8 @@ public class MoGoApplication extends MultiDexApplication { clientConfig.setThirdPartyDeviceId(Devices.getSn()); // 设置循环检测间隔时间 clientConfig.setLoopCheckDelay(15 * 1000); + // 设置是否属于高精定位设备 + clientConfig.setIsAccuracyDevice(false); // 设置DNS经纬度位置 clientConfig.setIHttpDnsCurrentLocation(new IHttpDnsCurrentLocation() { diff --git a/app/src/main/java/com/mogo/cloud/SPIRealTimeTestClass.java b/app/src/main/java/com/mogo/cloud/SPIRealTimeTestClass.java index 9456e48..38fff16 100644 --- a/app/src/main/java/com/mogo/cloud/SPIRealTimeTestClass.java +++ b/app/src/main/java/com/mogo/cloud/SPIRealTimeTestClass.java @@ -27,6 +27,7 @@ class SPIRealTimeTestClass implements IRealTimeProvider { recognizedResult.carId = "11"; recognizedResult.alt = 55; recognizedResult.speed = 7.0; + recognizedResult.dataAccuracy = 0; list.add(recognizedResult); return list; } diff --git a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClientConfig.java b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClientConfig.java index e64ac0d..0f07ffe 100644 --- a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClientConfig.java +++ b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClientConfig.java @@ -82,6 +82,11 @@ public class MoGoAiCloudClientConfig { */ private boolean mIsUseExternalLocation; + /** + * 是否为高精定位设备 + */ + private boolean mIsAccuracyDevice; + /** * 设置HttpDns的位置监听 */ @@ -304,6 +309,24 @@ public class MoGoAiCloudClientConfig { mIsUseExternalLocation = isUseExternalLocation; } + /** + * 获取是否为高精定位设备 + * + * @return true-使用,false-使用sdk的定位数据 + */ + public boolean getIsAccuracyDevice() { + return mIsAccuracyDevice; + } + + /** + * 设置是否为高精定位设备 + * + * @param isAccuracyDevice true-属于高精定位设备,false-不属于高精定位设备 + */ + public void setIsAccuracyDevice(boolean isAccuracyDevice) { + mIsAccuracyDevice = isAccuracyDevice; + } + /** * 返回HttpDns的位置信息,必须设置,否则将无法使用网络请求 * diff --git a/gradle.properties b/gradle.properties index 3900de6..fc452ec 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.0.20-SNAPSHOT MOGO_NETWORK_VERSION=1.0.20-SNAPSHOT diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/ADASRecognizedResult.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/ADASRecognizedResult.java index c4f7c34..cc3f84f 100644 --- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/ADASRecognizedResult.java +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/ADASRecognizedResult.java @@ -66,4 +66,16 @@ class ADASRecognizedResult { */ public long mortonCode; + /** + * 实际距离 + * 使用distanceX和distanceY计算 + */ + public double distance; + + /** + * 数据来源精度 + * 0:普通定位 + * 1:高精定位 + */ + public int dataAccuracy; } diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/FrequencyData.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/FrequencyData.java new file mode 100644 index 0000000..c9f66f5 --- /dev/null +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/FrequencyData.java @@ -0,0 +1,63 @@ +package com.mogo.realtime.entity; + +public class FrequencyData { + + /** + * 采集单位: + * 1.毫秒 + * 2.秒 + * 3.分钟 + * 4.小时 + */ + private int unit = 1; + + /** + * 采集时间间隔,如时间单位选毫秒,则时间间隔设置为200ms采集一次 + */ + private long collectionInterval; + + /** + * 采集设备上报时间,如准时在200ms时上报采集的数据 + */ + private long reportStartTime; + + /** + * 采集设备类型: + * 1.车机 + * 2.路设 + * 3.全部 + */ + private int type; + + public int getUnit() { + return unit; + } + + public void setUnit(int unit) { + this.unit = unit; + } + + public long getCollectionInterval() { + return collectionInterval; + } + + public void setCollectionInterval(long collectionInterval) { + this.collectionInterval = collectionInterval; + } + + public long getReportStartTime() { + return reportStartTime; + } + + public void setReportStartTime(long reportStartTime) { + this.reportStartTime = reportStartTime; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/LocationResult.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/LocationResult.java index aea8da4..32b08ea 100644 --- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/LocationResult.java +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/LocationResult.java @@ -27,4 +27,11 @@ public class LocationResult { * 1s 内的连续定位点 */ public List< CloudLocationInfo > coordinates; + + /** + * 数据来源精度 + * 0:普通定位 + * 1:高精定位 + */ + public int dataAccuracy = 0; } 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 2c9aa97..4c94ef0 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 @@ -1,7 +1,6 @@ package com.mogo.realtime.socket; import android.content.Context; -import android.os.SystemClock; import com.mogo.cloud.passport.MoGoAiCloudClient; import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener; @@ -11,6 +10,7 @@ import com.mogo.cloud.socket.WebSocketData; import com.mogo.realtime.core.SimpleLocationCorrectStrategy; import com.mogo.realtime.entity.ADASRecognizedResult; import com.mogo.realtime.entity.CloudLocationInfo; +import com.mogo.realtime.entity.FrequencyData; import com.mogo.realtime.entity.LocationResult; import com.mogo.realtime.entity.MogoSnapshotSetData; import com.mogo.realtime.entity.OnePerSecondSendContent; @@ -39,8 +39,6 @@ public class SocketHandler { private static final int LOW_FREQUENCY_CHANNEL_ID = 0x040003; //低频数据 private String mAppId; - private long serverTime = 0; - private long receiveMsgTime = 0; private CloudLocationInfo mLastInfo; private final List onMsgListenerList = new ArrayList<>(); private final List onAckListenerList = new ArrayList<>(); @@ -97,30 +95,29 @@ public class SocketHandler { public void onMsgReceived(WebSocketData webSocketData) { int msgType = webSocketData.getMsgType(); if (msgType == MSG_TYPE_ACK.getMsgType()) { - if (webSocketData.getUtcTime() > 0) { - serverTime = webSocketData.getUtcTime(); - receiveMsgTime = SystemClock.elapsedRealtime(); - if (webSocketData.getUpUtcTime() > 0) { - long nextDelay = webSocketData.getUpUtcTime() - serverTime; - if (!MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getIsUseExternalLocation()) { - for (IMogoCloudOnAckListener ackListener : onAckListenerList) { - if (ackListener != null) { - ackListener.onAck(nextDelay); - } - } + FrequencyData frequencyData = GsonUtil.objectFromJson(webSocketData.getData(), FrequencyData.class); + if (frequencyData == null) { + Logger.e(TAG, "onMsgReceived FrequencyData == null "); + return; + } + long reportStartTime = frequencyData.getReportStartTime(); + if (reportStartTime > 0) { + for (IMogoCloudOnAckListener ackListener : onAckListenerList) { + if (ackListener != null) { + ackListener.onAck(reportStartTime); } } } } if (msgType == MSG_TYPE_DOWNLINK_CAR_DATA.getMsgType()) { - MogoSnapshotSetData data = GsonUtil.objectFromJson(webSocketData.getData(), MogoSnapshotSetData.class); - if (data == null) { + MogoSnapshotSetData snapshotSetData = GsonUtil.objectFromJson(webSocketData.getData(), MogoSnapshotSetData.class); + if (snapshotSetData == null) { Logger.e(TAG, "onMsgReceived MogoSnapshotSetData == null "); return; } for (IMogoCloudOnMsgListener listener : onMsgListenerList) { if (listener != null) { - listener.onMsgReceived(data); + listener.onMsgReceived(snapshotSetData); } } } @@ -157,7 +154,15 @@ public class SocketHandler { } locationResult.coordinates = new ArrayList<>(); locationResult.sn = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getSn(); + boolean isAccuracyDevice = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getIsAccuracyDevice(); locationResult.coordinates.addAll(cloudLocationInfo); + if (isAccuracyDevice) { + if (cloudLocationInfo.size() > 2) { + locationResult.dataAccuracy = 1; + } else { + Logger.w(TAG, "MoGoAiCloudClient setAccuracyDevice is true , but the amount of data does not meet the requirements"); + } + } } List recognizedResults = RealTimeProviderImp.getInstance().getLastADASRecognizedResult();//SPI接口返回 OnePerSecondSendContent content = new OnePerSecondSendContent(); @@ -172,7 +177,7 @@ public class SocketHandler { WebSocketData webSocketData = new WebSocketData(); webSocketData.setMsgType(MSG_TYPE_UPLINK_CAR_DATA.getMsgType()); - webSocketData.setSeq(computeSendMsgTime()); + webSocketData.setSeq(System.currentTimeMillis()); webSocketData.setSn(MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getSn()); webSocketData.setData(GsonUtil.jsonFromObject(content)); String msg = GsonUtil.jsonFromObject(webSocketData); @@ -203,22 +208,4 @@ public class SocketHandler { mInstance = null; } - /** - * 服务端会在ack数据中增加服务端的时间戳{@link #serverTime}, 收到消息时,记录收到消息的时间{@link #receiveMsgTime},收消息的时间用{@link SystemClock#elapsedRealtime()}可以避免系统时间改变造成的影响 - * 在发送数据时,使用serverTime+(elapseRealtime()-receiveMsgTime)计算发送数据时的时间戳,这个时间戳是基本相对服务端的时间戳为基准的时间,忽略了ack下发时的时间延迟 - *

- * 如果{@link #serverTime}或{@link #receiveMsgTime}数据有异常,则使用{@link System#currentTimeMillis()}当做当前时间,作为容错 - * - * @return 基本相对服务端的时间戳为基准的时间 - */ - private long computeSendMsgTime() { - long sendMsgTime; - if (serverTime > 0 && receiveMsgTime > 0) { - sendMsgTime = serverTime + (SystemClock.elapsedRealtime() - receiveMsgTime); - } else { - sendMsgTime = System.currentTimeMillis(); - } - return sendMsgTime; - } - } From 74ca0dfe192ab97adc2f1acc2e2f387177fc6160 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Mon, 22 Feb 2021 11:29:04 +0800 Subject: [PATCH 2/4] fix bug of msgbody convert byte --- .../src/main/java/com/mogo/cloud/socket/MsgBody.java | 6 +++--- .../src/main/java/com/mogo/cloud/socket/SocketManager.java | 2 +- .../main/java/com/mogo/realtime/socket/SocketHandler.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/MsgBody.java b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/MsgBody.java index 39c2311..24e2893 100644 --- a/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/MsgBody.java +++ b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/MsgBody.java @@ -23,7 +23,7 @@ public class MsgBody { /** * 消息内容 */ - private Object mContent; + private byte[] mContent; public MsgBody msgType(int msgType) { this.mMsgType = msgType; @@ -35,7 +35,7 @@ public class MsgBody { return this; } - public MsgBody content(Object object) { + public MsgBody content(byte[] object) { this.mContent = object; return this; } @@ -52,7 +52,7 @@ public class MsgBody { return mMsgId; } - public Object getContent() { + public byte[] getContent() { return mContent; } } 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 324e613..ec07b65 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 @@ -120,7 +120,7 @@ public class SocketManager implements IMogoCloudSocketManager, Callback { @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().toString().getBytes()); + final byte[] pb = convertToPBBytes(body.getMsgType(), body.getContent()); SocketClient.getInstance().sendData(appId, MogoCommon.Product.mogoBussiness.getNumber(), pb, headerType, true, body.getMsgId()); mAckListeners.put(body.getMsgId(), listener); } 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 4c94ef0..0918bde 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 @@ -188,7 +188,7 @@ public class SocketHandler { } MsgBody msgBody = new MsgBody(); msgBody.msgType(msgType); - msgBody.content(msg); + msgBody.content(msg.getBytes()); SocketManager.getInstance().sendMsg(mAppId, HEADER_TYPE, msgBody, msgId -> { for (IMogoCloudOnMsgListener listener : onMsgListenerList) { if (listener != null) { From 03e8c6cf3f770fd85b06beb9b1065f84c527bc4a Mon Sep 17 00:00:00 2001 From: zhongchao Date: Mon, 22 Feb 2021 12:47:10 +0800 Subject: [PATCH 3/4] fix bug of realTime return data --- .../main/java/com/mogo/realtime/spi/RealTimeProviderImp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index e50de27..bf89510 100644 --- 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 @@ -40,7 +40,7 @@ public class RealTimeProviderImp implements IRealTimeProvider { @Override public List getLocationMsg() { if (mDelegate != null) { - mDelegate.getLocationMsg(); + return mDelegate.getLocationMsg(); } return null; } From 3cedba9649b429ba9590c4c7a83dcd2b131a6af3 Mon Sep 17 00:00:00 2001 From: zhongchao Date: Tue, 23 Feb 2021 17:56:23 +0800 Subject: [PATCH 4/4] extends realTimeProvider --- .../java/com/mogo/cloud/SPIRealTimeTestClass.java | 5 +++++ .../com/mogo/realtime/api/IRealTimeProvider.java | 7 ++++++- .../java/com/mogo/realtime/socket/SocketHandler.java | 12 +++--------- .../com/mogo/realtime/spi/RealTimeProviderImp.java | 8 ++++++++ 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/mogo/cloud/SPIRealTimeTestClass.java b/app/src/main/java/com/mogo/cloud/SPIRealTimeTestClass.java index 38fff16..ec37e58 100644 --- a/app/src/main/java/com/mogo/cloud/SPIRealTimeTestClass.java +++ b/app/src/main/java/com/mogo/cloud/SPIRealTimeTestClass.java @@ -46,4 +46,9 @@ class SPIRealTimeTestClass implements IRealTimeProvider { list.add(info); return list; } + + @Override + public int getLocationAccuracy() { + return 0; + } } 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 index 47b9f43..5f2f3c0 100644 --- 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 @@ -16,8 +16,13 @@ public interface IRealTimeProvider { List getLastADASRecognizedResult(); /** - * 发送消息,由外部传入 + * 发送自车定位信息,由外部传入 */ List getLocationMsg(); + /** + * 自车定位信息 精度 + * @see com.mogo.realtime.entity.LocationResult dataAccuracy 字段 + */ + int getLocationAccuracy(); } 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 0918bde..89ff4a0 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 @@ -154,15 +154,8 @@ public class SocketHandler { } locationResult.coordinates = new ArrayList<>(); locationResult.sn = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getSn(); - boolean isAccuracyDevice = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getIsAccuracyDevice(); locationResult.coordinates.addAll(cloudLocationInfo); - if (isAccuracyDevice) { - if (cloudLocationInfo.size() > 2) { - locationResult.dataAccuracy = 1; - } else { - Logger.w(TAG, "MoGoAiCloudClient setAccuracyDevice is true , but the amount of data does not meet the requirements"); - } - } + locationResult.dataAccuracy = RealTimeProviderImp.getInstance().getLocationAccuracy();//SPI接口返回 } List recognizedResults = RealTimeProviderImp.getInstance().getLastADASRecognizedResult();//SPI接口返回 OnePerSecondSendContent content = new OnePerSecondSendContent(); @@ -182,8 +175,9 @@ public class SocketHandler { webSocketData.setData(GsonUtil.jsonFromObject(content)); String msg = GsonUtil.jsonFromObject(webSocketData); + boolean isAccuracyDevice = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getIsAccuracyDevice(); int msgType = LOW_FREQUENCY_CHANNEL_ID; - if (cloudLocationInfo.size() > 2) { + if (isAccuracyDevice && cloudLocationInfo.size() > 2) { msgType = HIGH_FREQUENCY_CHANNEL_ID; } MsgBody msgBody = new MsgBody(); 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 index bf89510..5e4f66e 100644 --- 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 @@ -45,4 +45,12 @@ public class RealTimeProviderImp implements IRealTimeProvider { return null; } + @Override + public int getLocationAccuracy() { + if (mDelegate != null) { + return mDelegate.getLocationAccuracy(); + } + return 0; + } + }