diff --git a/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/SocketManager.java b/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/SocketManager.java index 48b58bbea9..472355ef1c 100644 --- a/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/SocketManager.java +++ b/foudations/mogo-connection/src/main/java/com/mogo/connection/socket/SocketManager.java @@ -74,7 +74,9 @@ public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallbac private SocketConnManager mSocketConnManager; - private long mLastMsgId = Long.MAX_VALUE; + public static final int MAX_CAP = 64; //保证充足的容量应对非常延时的推送 + private ArrayList< Long > mReceivedMsgId = new ArrayList<>( MAX_CAP ); + private int mCurrentIndex = 0; @Override public void init( Context context, String appId ) { @@ -93,15 +95,15 @@ public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallbac if ( listeners != null && !listeners.isEmpty() ) { Iterator< IMogoOnMessageListener > iterator = listeners.iterator(); if ( msgId != 0 ) { //兼容老版本 - if ( mLastMsgId == msgId ) { // 避免消息重发 + if ( mReceivedMsgId.contains( msgId ) ) { // 避免消息重发 return; } + cacheLastReceivedMsgId( msgId ); } - mLastMsgId = msgId; while ( iterator.hasNext() ) { IMogoOnMessageListener listener = iterator.next(); if ( listener != null ) { - Logger.d(TAG, "received msg == %s, msgId = %s", payload.getPayload().toStringUtf8(), msgId); + Logger.d( TAG, "received msg == %s, msgId = %s", payload.getPayload().toStringUtf8(), msgId ); listener.onMsgReceived( GsonUtil.objectFromJson( payload.getPayload().toStringUtf8(), listener.target() ) ); } } @@ -111,6 +113,16 @@ public class SocketManager implements IMogoSocketManager, OnSocketReceiveCallbac } } + private void cacheLastReceivedMsgId( long msgId ) { + if ( msgId == 0 ) { + return; + } + synchronized ( this ){ + mReceivedMsgId.add( mCurrentIndex % MAX_CAP, msgId ); + mCurrentIndex++; + } + } + @Override public void onAck( byte[] headerBytes, byte[] payloadBytes ) { try { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java index 7c2a72cb31..93930a4f42 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/MogoServiceProvider.java @@ -428,6 +428,7 @@ public class MogoServiceProvider implements IMogoModuleProvider, @Override public void onMapChanged( MogoLatLng latLng, float zoom, float tilt, float bearing ) { + if ( mIsCameraInited ) { mLastZoomLevel = zoom; mLastCustomRefreshCenterLocation = latLng; @@ -444,6 +445,7 @@ public class MogoServiceProvider implements IMogoModuleProvider, if ( mStatusManager.isUserInteracted() ) { mLastCustomRefreshCenterLocation = latLng; mLastZoomLevel = zoom; + refreshCameraPosition(); return; } @@ -487,6 +489,7 @@ public class MogoServiceProvider implements IMogoModuleProvider, if ( factor == 0.0f ) { return false; } + Logger.d( TAG, "invokeRefreshWhenTranslationByUser,mLastCustomRefreshCenterLocation = %s, latLng = %s", mLastCustomRefreshCenterLocation, latLng ); float distance = Utils.calculateLineDistance( latLng, mLastCustomRefreshCenterLocation ); return distance > factor; } catch ( Exception e ) { @@ -500,6 +503,9 @@ public class MogoServiceProvider implements IMogoModuleProvider, if ( location == null ) { return; } + + Logger.d( TAG, "onLocationChanged = %s", location ); + // 自动刷新触发 final MogoLatLng point = new MogoLatLng( location.getLatitude(), location.getLongitude() ); if ( mLastAutoRefreshLocation == null ) { diff --git a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java index 697c4438ad..99d1c23482 100644 --- a/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java +++ b/modules/mogo-module-service/src/main/java/com/mogo/module/service/marker/MapMarkerManager.java @@ -510,8 +510,8 @@ public class MapMarkerManager implements IMogoMarkerClickListener, IMogoOnMessag if (isFirstMarker && isOnLineCard) { if (nearlyMogoMarker != null) { Logger.w(TAG, "ACC ON,或者语音搜索触发,默认选中最近的在线车辆nearlyMogoMarker:" + nearlyMogoMarker); -// onMarkerClicked(nearlyMogoMarker); -// MogoMarkersHandler.getInstance().onMarkerClicked(nearlyMogoMarker); + onMarkerClicked(nearlyMogoMarker); + MogoMarkersHandler.getInstance().onMarkerClicked(nearlyMogoMarker); isFirstMarker = false; } }