From 39eb08e3f2d67d68b54bcc955a10b1ad75d7cfa1 Mon Sep 17 00:00:00 2001 From: imhao183 Date: Thu, 16 Jul 2020 17:55:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E6=81=AF=E8=BF=87=E6=9C=9F=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/moquette/persistence/DatabaseStore.java | 11 ++++++++++- .../io/moquette/persistence/MemoryMessagesStore.java | 8 +++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java index 2c310c8c..4e3f01f1 100644 --- a/broker/src/main/java/io/moquette/persistence/DatabaseStore.java +++ b/broker/src/main/java/io/moquette/persistence/DatabaseStore.java @@ -826,7 +826,16 @@ public class DatabaseStore { } } WFCMessage.Message message = builder.build(); - messages.add(message); + boolean expired = false; + if (message.getContent().getExpireDuration() > 0) { + if (System.currentTimeMillis() > message.getServerTimestamp() + message.getContent().getExpireDuration()*1000) { + expired = true; + } + } + + if (!expired) { + messages.add(message); + } } if (count == 0) { diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index 76a3b8e5..56ec4d8f 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -493,7 +493,7 @@ public class MemoryMessagesStore implements IMessagesStore { } if (bundle.getMessage().getContent().getExpireDuration() > 0) { - if (System.currentTimeMillis() < bundle.getMessage().getServerTimestamp() + bundle.getMessage().getContent().getExpireDuration()) { + if (System.currentTimeMillis() > bundle.getMessage().getServerTimestamp() + bundle.getMessage().getContent().getExpireDuration()*1000) { continue; } } @@ -587,6 +587,12 @@ public class MemoryMessagesStore implements IMessagesStore { MessageBundle bundle = mIMap.get(targetMessageId); if (bundle != null) { if (exceptClientId == null || !exceptClientId.equals(bundle.getFromClientId()) || !fromUser.equals(bundle.getFromUser())) { + if (bundle.getMessage().getContent().getExpireDuration() > 0) { + if (System.currentTimeMillis() > bundle.getMessage().getServerTimestamp() + bundle.getMessage().getContent().getExpireDuration() * 1000) { + continue; + } + } + size += bundle.getMessage().getSerializedSize(); if (size >= 3 * 1024 * 1024) { //3M break;