diff --git a/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/SocketHandler.java b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/SocketHandler.java new file mode 100644 index 0000000..89fdecc --- /dev/null +++ b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/SocketHandler.java @@ -0,0 +1,83 @@ +package com.mogo.cloud.socket; + +import android.content.Context; +import android.os.SystemClock; + +import com.mogo.utils.network.utils.GsonUtil; + +import java.util.List; + +import static com.mogo.cloud.socket.WebSocketMsgType.MSG_TYPE_ACK; + +/** + * @author liujing + * @description 描述 + * @since: 2021/1/22 + */ +public class SocketHandler { + private static volatile SocketHandler mInstance; + private long serverTime = 0; + private long receiveMsgTime = 0; + private List listenerList; + + public static SocketHandler getInstance() { + if (mInstance == null) { + synchronized (SocketManager.class) { + if (mInstance == null) { + mInstance = new SocketHandler(); + } + } + } + return mInstance; + } + + /* + * useInner: 是否注册自己内部的监听 + * */ + public void initSocket(Context context, boolean useInner, String appId, IMogoCloudSocketOnMessageListener listener) { + SocketManager.getInstance().init(context, appId); + if (useInner) { + SocketManager.getInstance().registerOnMessageListener(0x040002, onMessageListener); + SocketManager.getInstance().registerOnMessageListener(0x040003, onMessageListener); + } else { + SocketManager.getInstance().registerOnMessageListener(0x040002, listener); + SocketManager.getInstance().registerOnMessageListener(0x040003, listener); + listenerList.add(listener); + } + } + + private final IMogoCloudSocketOnMessageListener onMessageListener = new IMogoCloudSocketOnMessageListener() { + @Override + public Class target() { + return String.class; + } + + @Override + public void onMsgReceived(String message) { + WebSocketData webSocketData = GsonUtil.objectFromJson(message, WebSocketData.class); + 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; + //todo +// MogoRTKLocation.getInstance().resetUploadDelay(nextDelay); + } + } + } + } + }; + + public void stop() { + //todo +// MogoRTKLocation.getInstance().unregisterRTKLocationListener(); +// MogoRTKLocation.getInstance().stop(); + for (int i = 0; i < listenerList.size(); i++) { + SocketManager.getInstance().unregisterOnMessageListener(0x040002, listenerList.get(i)); + SocketManager.getInstance().unregisterOnMessageListener(0x040003, listenerList.get(i)); + } + } + +} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/WebSocketData.java b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/WebSocketData.java similarity index 97% rename from modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/WebSocketData.java rename to foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/WebSocketData.java index e90a3f3..8425699 100644 --- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/entity/WebSocketData.java +++ b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/WebSocketData.java @@ -1,4 +1,4 @@ -package com.mogo.realtime.entity; +package com.mogo.cloud.socket; import java.io.Serializable; diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/connect/WebSocketMsgType.java b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/WebSocketMsgType.java similarity index 93% rename from modules/mogo-realtime/src/main/java/com/mogo/realtime/connect/WebSocketMsgType.java rename to foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/WebSocketMsgType.java index ec1f9a1..b736c6d 100644 --- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/connect/WebSocketMsgType.java +++ b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/WebSocketMsgType.java @@ -1,4 +1,4 @@ -package com.mogo.realtime.connect; +package com.mogo.cloud.socket; public enum WebSocketMsgType { diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/Imp/RealTimeProviderImp.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/Imp/RealTimeProviderImp.java index 5f7ea6b..11aa066 100644 --- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/Imp/RealTimeProviderImp.java +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/Imp/RealTimeProviderImp.java @@ -5,6 +5,7 @@ import android.content.Context; import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener; import com.mogo.realtime.Interface.RealTimeProvider; import com.mogo.realtime.entity.ADASRecognizedResult; +import com.mogo.realtime.entity.CloudLocationInfo; import java.util.List; @@ -47,9 +48,9 @@ public class RealTimeProviderImp implements RealTimeProvider { } @Override - public void sendMsg(Object body, IMogoCloudSocketOnMessageListener listener) { - if (mDelegate != null) { - mDelegate.sendMsg(body, listener); + public void sendMsg(List list, IMogoCloudSocketOnMessageListener listener) { + if (mDelegate != null){ + mDelegate.sendMsg(list,listener); } } diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/Interface/RealTimeProvider.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/Interface/RealTimeProvider.java index 00bf758..dffb7a5 100644 --- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/Interface/RealTimeProvider.java +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/Interface/RealTimeProvider.java @@ -4,6 +4,7 @@ import android.content.Context; import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener; import com.mogo.realtime.entity.ADASRecognizedResult; +import com.mogo.realtime.entity.CloudLocationInfo; import java.util.List; @@ -44,8 +45,8 @@ public interface RealTimeProvider { /** * 发送消息 * - * @param body 消息体 + * @param list 消息体 * @param listener 回执监听 */ - void sendMsg(T body, IMogoCloudSocketOnMessageListener listener ); + public void sendMsg(List list, IMogoCloudSocketOnMessageListener listener); } diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/constant/SnapshotUploadInTime.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/constant/SnapshotUploadInTime.java index f445710..2c057c3 100644 --- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/constant/SnapshotUploadInTime.java +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/constant/SnapshotUploadInTime.java @@ -7,11 +7,12 @@ import android.util.Log; import com.mogo.cloud.passport.MoGoAiCloudClient; import com.mogo.cloud.socket.IMogoCloudSocketOnMessageListener; import com.mogo.cloud.socket.MsgBody; +import com.mogo.cloud.socket.SocketHandler; import com.mogo.cloud.socket.SocketManager; import com.mogo.realtime.Interface.RealTimeApisHandler; import com.mogo.realtime.entity.ADASRecognizedResult; import com.mogo.realtime.entity.CloudLocationInfo; -import com.mogo.realtime.entity.WebSocketData; +import com.mogo.cloud.socket.WebSocketData; import com.mogo.realtime.location.LocationResult; import com.mogo.realtime.location.MogoRTKLocation; import com.mogo.realtime.entity.OnePerSecondSendContent; @@ -21,7 +22,7 @@ import com.mogo.utils.network.utils.GsonUtil; import java.util.ArrayList; import java.util.List; -import static com.mogo.realtime.connect.WebSocketMsgType.MSG_TYPE_ACK; +import static com.mogo.cloud.socket.WebSocketMsgType.MSG_TYPE_ACK; /** * @author congtaowang @@ -61,43 +62,15 @@ public class SnapshotUploadInTime implements MogoRTKLocation.RTKLocationListener return sInstance; } - public void start(Context context) { + public void start(Context context, boolean useInner, String appId, IMogoCloudSocketOnMessageListener listener) { mContext = context.getApplicationContext(); MogoRTKLocation.getInstance().registerRTKLocationListener(this); - //todo - SocketManager.getInstance().init(context,"com.mogo.launcher"); - SocketManager.getInstance().registerOnMessageListener(0x040002,onMessageListener); - SocketManager.getInstance().registerOnMessageListener(0x040003,onMessageListener); + + SocketHandler.getInstance().initSocket(context, useInner, appId, listener); } - private final IMogoCloudSocketOnMessageListener onMessageListener = new IMogoCloudSocketOnMessageListener() { - @Override - public Class target() { - return String.class; - } - - @Override - public void onMsgReceived(String message) { - WebSocketData webSocketData = GsonUtil.objectFromJson(message, WebSocketData.class); - 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; - MogoRTKLocation.getInstance().resetUploadDelay(nextDelay); - } - } - } - } - }; - public void stop() { - MogoRTKLocation.getInstance().unregisterRTKLocationListener(); - MogoRTKLocation.getInstance().stop(); - SocketManager.getInstance().unregisterOnMessageListener(0x040002,onMessageListener); - SocketManager.getInstance().unregisterOnMessageListener(0x040003,onMessageListener); + SocketHandler.getInstance().stop(); } @Override @@ -162,7 +135,7 @@ public class SnapshotUploadInTime implements MogoRTKLocation.RTKLocationListener MsgBody msgBody = new MsgBody(); msgBody.msgType(msgType); msgBody.content(msg); - SocketManager.getInstance().sendMsg(msgBody,msgId -> { + SocketManager.getInstance().sendMsg(msgBody, msgId -> { });