From 7727fad4dc8f7019f7f5125476855cd0b8a6a3fd Mon Sep 17 00:00:00 2001 From: heavyrian2012 Date: Fri, 29 Sep 2023 11:26:16 +0800 Subject: [PATCH] =?UTF-8?q?=E9=81=BF=E5=85=8D=E6=97=A0=E9=99=90=E5=88=B6?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E5=A5=BD=E5=8F=8B=E8=AF=B7=E6=B1=82=EF=BC=8C?= =?UTF-8?q?=E5=A5=BD=E5=8F=8B=E8=AF=B7=E6=B1=82=E5=9C=A85=E5=88=86?= =?UTF-8?q?=E9=92=9F=E4=B9=8B=E5=86=85=E5=8F=AA=E5=85=81=E8=AE=B8=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E8=AF=B7=E6=B1=82=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/MemoryMessagesStore.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 22f158a5..c74d9d7a 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -137,6 +137,13 @@ public class MemoryMessagesStore implements IMessagesStore { private ConcurrentHashMap userPushHiddenDetail = new ConcurrentHashMap<>(); private ConcurrentHashMap userConvSlientMap = new ConcurrentHashMap<>(); + private LinkedHashMap repeatFriendRequest = new LinkedHashMap() { + @Override + protected boolean removeEldestEntry(Map.Entry eldest) { + return System.currentTimeMillis() - eldest.getValue() > 5 * 60 * 1000; + } + }; + private boolean mDisableSearch = false; private boolean mDisableNicknameSearch = false; private boolean mDisableFriendRequest = false; @@ -3120,6 +3127,18 @@ public class MemoryMessagesStore implements IMessagesStore { if (!(mFriendRequestDuration > 0 && System.currentTimeMillis() - existRequest.getUpdateDt() > mFriendRequestDuration)) { if(System.currentTimeMillis() - existRequest.getUpdateDt() > 5 * 60 * 1000) { return ErrorCode.ERROR_CODE_FRIEND_ALREADY_REQUEST; + } else { + mWriteLock.lock(); + try { + String repeatKey = userId + "-" + existRequest.getToUid(); + Long lastTime = repeatFriendRequest.get(repeatKey); + if(lastTime != null && System.currentTimeMillis() - lastTime < 5 * 60 * 1000) { + return ErrorCode.ERROR_CODE_FRIEND_ALREADY_REQUEST; + } + repeatFriendRequest.put(repeatKey, System.currentTimeMillis()); + } finally { + mWriteLock.unlock(); + } } } }