From cf21c84518ff44c493e0abeecdfcab5fd035a4f8 Mon Sep 17 00:00:00 2001 From: zhouhao Date: Wed, 10 Aug 2022 09:22:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96msgid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../official/binary/BinaryMessageType.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/jetlinks/protocol/official/binary/BinaryMessageType.java b/src/main/java/org/jetlinks/protocol/official/binary/BinaryMessageType.java index 0fb77f3..1dead1e 100644 --- a/src/main/java/org/jetlinks/protocol/official/binary/BinaryMessageType.java +++ b/src/main/java/org/jetlinks/protocol/official/binary/BinaryMessageType.java @@ -15,6 +15,7 @@ import org.jetlinks.core.message.property.*; import java.time.Duration; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiFunction; import java.util.function.Supplier; @@ -59,16 +60,22 @@ public enum BinaryMessageType { private static class MsgIdHolder { private int msgId = 0; - private final BiMap cached = HashBiMap.create(); + private final Map cached = CacheBuilder + .newBuilder() + .expireAfterWrite(Duration.ofSeconds(30)) + . build() + .asMap(); public synchronized int next(String id) { if (id == null) { return -1; } - if (msgId++ < 0) { - msgId = 0; - } - cached.put(msgId, id); + do { + if (msgId++ < 0) { + msgId = 0; + } + } while (cached.putIfAbsent(msgId, id) != null); + return msgId; }