diff --git a/pom.xml b/pom.xml
index 9d5b9d9..478086b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
ru.bvn13
jircbot
- 2.2.1
+ 2.2.2
jar
@@ -18,8 +18,6 @@
- 2.2.1
-
1.8
2.3-SNAPSHOT
diff --git a/src/main/java/ru/bvn13/jircbot/listeners/DeferredMessagesListener.java b/src/main/java/ru/bvn13/jircbot/listeners/DeferredMessagesListener.java
index 77b7c04..756a587 100644
--- a/src/main/java/ru/bvn13/jircbot/listeners/DeferredMessagesListener.java
+++ b/src/main/java/ru/bvn13/jircbot/listeners/DeferredMessagesListener.java
@@ -16,7 +16,10 @@ import ru.bvn13.jircbot.documentation.DocumentationProvider;
import ru.bvn13.jircbot.documentation.ListenerDescription;
import java.text.SimpleDateFormat;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import static ru.bvn13.jircbot.documentation.ListenerDescription.CommandDescription;
@@ -36,6 +39,8 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter implements
private DeferredMessageService deferredMessageService;
+ private Map mutexes = new ConcurrentHashMap<>();
+
@Autowired
public DeferredMessagesListener(DocumentationProvider documentationProvider) {
registerDescription(documentationProvider);
@@ -127,18 +132,21 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter implements
}
-
private void sendDeferredMessage(final MessageEvent event) {
if (event.getUser() != null) {
String userIdent = event.getUser().getNick() + "!" + event.getUser().getLogin() + "@" + event.getUser().getHostname();
+ Object mutex = mutexes.containsKey(userIdent) ? mutexes.get(userIdent) : new Object();
+ mutexes.put(userIdent, mutex);
- List deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase(), userIdent);
- if (deferredMessages != null && deferredMessages.size() > 0) {
- DeferredMessage msg = deferredMessages.get(0);
- String more = "" + (deferredMessages.size() > 1 ? " (" + (deferredMessages.size() - 1) + " message/-s more)" : "");
- event.respond("User " + msg.getSender() + " at " + dt.format(msg.getDtCreated()) + " told you" + more + ": " + msg.getMessage());
- deferredMessageService.markMessageWasSent(msg);
+ synchronized (mutex) {
+ List deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase(), userIdent);
+ if (deferredMessages != null && deferredMessages.size() > 0) {
+ DeferredMessage msg = deferredMessages.get(0);
+ String more = "" + (deferredMessages.size() > 1 ? " (" + (deferredMessages.size() - 1) + " message/-s more)" : "");
+ event.respond("User " + msg.getSender() + " at " + dt.format(msg.getDtCreated()) + " told you" + more + ": " + msg.getMessage());
+ deferredMessageService.markMessageWasSent(msg);
+ }
}
}
}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index cf5671d..58fffab 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,5 +1,5 @@
-jircbot.version=2.2.1
+jircbot.version=2.2.2
jircbot.config=config.json