This commit is contained in:
wangcongtao
2020-02-21 13:39:23 +08:00
parent d84c243799
commit d481cf1c70
3 changed files with 24 additions and 6 deletions

View File

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