diff --git a/src/main/java/org/jitsi/jigasi/JvbConference.java b/src/main/java/org/jitsi/jigasi/JvbConference.java index d9b1e886a..b3af0ec6b 100644 --- a/src/main/java/org/jitsi/jigasi/JvbConference.java +++ b/src/main/java/org/jitsi/jigasi/JvbConference.java @@ -67,6 +67,7 @@ import java.io.*; import java.net.*; import java.util.*; +import java.util.concurrent.*; import static net.java.sip.communicator.service.protocol.event.LocalUserChatRoomPresenceChangeEvent.*; import static org.jivesoftware.smack.packet.StanzaError.Condition.*; @@ -185,6 +186,8 @@ public class JvbConference */ private String meetingId; + private static ExecutorService threadPool = Util.createNewThreadPool("xmpp-executor-pool"); + /** * A queue used to offload xmpp execution in a new thread to avoid blocking xmpp threads, * by executing the tasks in new thread @@ -208,7 +211,32 @@ public class JvbConference return false; } }, - Util.createNewThreadPool("xmpp-executor-pool") + threadPool + ); + + /** + * A queue used for sending xmpp messages. + */ + public final PacketQueue xmppSendQueue = new PacketQueue<>( + Integer.MAX_VALUE, + false, + "xmpp-send-queue", + r -> { + // do process and try + try + { + r.run(); + + return true; + } + catch (Throwable e) + { + logger.error("Error processing xmpp queue item", e); + + return false; + } + }, + threadPool ); /** @@ -2306,7 +2334,7 @@ private void processVisitorsJson(String json) */ public void sendMessageToRoom(String messageString) { - xmppInvokeQueue.add(() -> sendMessageToRoomInternal(messageString)); + xmppSendQueue.add(() -> sendMessageToRoomInternal(messageString)); } public void sendMessageToRoomInternal(String messageString) @@ -2338,7 +2366,7 @@ public void sendMessageToRoomInternal(String messageString) */ public void sendJsonMessage(JSONObject jsonMessage) { - xmppInvokeQueue.add(() -> sendJsonMessageInternal(jsonMessage)); + xmppSendQueue.add(() -> sendJsonMessageInternal(jsonMessage)); } private void sendJsonMessageInternal(JSONObject jsonMessage) diff --git a/src/main/java/org/jitsi/jigasi/lobby/Lobby.java b/src/main/java/org/jitsi/jigasi/lobby/Lobby.java index 977716c05..a8a1b0695 100644 --- a/src/main/java/org/jitsi/jigasi/lobby/Lobby.java +++ b/src/main/java/org/jitsi/jigasi/lobby/Lobby.java @@ -202,7 +202,7 @@ protected void leaveRoom() @Override public void invitationReceived(ChatRoomInvitationReceivedEvent evt) { - JvbConference.xmppInvokeQueue.add(() -> invitationReceivedInternal(evt)); + this.jvbConference.xmppInvokeQueue.add(() -> invitationReceivedInternal(evt)); } private void invitationReceivedInternal(ChatRoomInvitationReceivedEvent chatRoomInvitationReceivedEvent) @@ -255,7 +255,7 @@ private void notifyAccessGranted() @Override public void localUserPresenceChanged(LocalUserChatRoomPresenceChangeEvent evt) { - JvbConference.xmppInvokeQueue.add(() -> localUserPresenceChangedInternal(evt)); + this.jvbConference.xmppInvokeQueue.add(() -> localUserPresenceChangedInternal(evt)); } private void localUserPresenceChangedInternal(LocalUserChatRoomPresenceChangeEvent evt)