diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/ClientMessage.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/ClientMessage.java index 627712d50bc42a5401291e3f0ee9bc1ffea969e5..94db9f56fabd58d684cc2b6efb921ba8b98fc35e 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/ClientMessage.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/ClientMessage.java @@ -21,4 +21,5 @@ package org.bigbluebutton.red5.client.messaging; public interface ClientMessage { + String getMessageName(); } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/ConnectionInvokerService.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/ConnectionInvokerService.java index 2d23b2118c7bbf49c41e6262b7571179ec8610e0..89471e30cce9ac8602615f44d7fd6c429406cddd 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/ConnectionInvokerService.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/ConnectionInvokerService.java @@ -21,7 +21,6 @@ package org.bigbluebutton.red5.client.messaging; import java.util.Set; import java.util.ArrayList; import java.util.List; -import java.util.HashSet; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; @@ -44,6 +43,8 @@ import org.red5.server.util.ScopeUtils; import org.slf4j.Logger; import com.google.gson.Gson; +import org.slf4j.Marker; +import org.slf4j.MarkerFactory; public class ConnectionInvokerService { private static Logger log = Red5LoggerFactory.getLogger(ConnectionInvokerService.class, "bigbluebutton"); @@ -75,15 +76,21 @@ public class ConnectionInvokerService { ClientMessage message; try { message = messages.take(); - sendMessageToClient(message); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + if (log.isTraceEnabled()) { + log.trace("Took message from queue: " + message.getMessageName()); + } + sendMessageToClient(message); + if (log.isTraceEnabled()) { + log.trace("Sent message to client: " + message.getMessageName()); + } + } catch (Exception e) { + Marker sendingException = MarkerFactory.getMarker("SENDING_EXCEPTION"); + log.error(sendingException, "Exception while sending message to client.", e); } } } }; - exec.execute(sender); + exec.execute(sender); } public void stop() { @@ -92,6 +99,9 @@ public class ConnectionInvokerService { } public void sendMessage(final ClientMessage message) { + if (log.isTraceEnabled()) { + log.trace("Queue message: " + message.getMessageName()); + } messages.offer(message); } @@ -124,7 +134,7 @@ public class ConnectionInvokerService { conn.close(); } } - } + } } private void handleDisconnectAllClientsMessage(DisconnectAllClientsMessage msg) { @@ -152,9 +162,9 @@ public class ConnectionInvokerService { log.info("Disconnecting user=[{}] from meeting=[{}]", msg.getUserId(), msg.getMeetingId()); conn.close(); } - } - } - } + } + } + } private void sendSharedObjectMessage(SharedObjectClientMessage msg) { IScope meetingScope = getScope(msg.getMeetingID()); @@ -167,7 +177,8 @@ public class ConnectionInvokerService { } } } - + + private void sendDirectMessage(final DirectClientMessage msg) { if (log.isTraceEnabled()) { Gson gson = new Gson(); @@ -200,9 +211,9 @@ public class ConnectionInvokerService { log.info("Cannot send message=[" + msg.getMessageName() + "] to [" + userId + "] as no such session on meeting=[" + msg.getMeetingID() + "]"); } - } + } } - }; + }; /** * We need to add a way to cancel sending when the thread is blocked. @@ -218,6 +229,7 @@ public class ConnectionInvokerService { f.get(timeLeft, TimeUnit.NANOSECONDS); } catch (ExecutionException e) { log.warn("ExecutionException while sending direct message on connection[" + userId + "]"); + log.warn("ExcecutionException cause: " + e.getMessage()); } catch (InterruptedException e) { log.warn("Interrupted exception while sending direct message on connection[" + userId + "]"); Thread.currentThread().interrupt(); @@ -226,7 +238,7 @@ public class ConnectionInvokerService { f.cancel(true); } } - + private void sendBroadcastMessage(final BroadcastClientMessage msg) { if (log.isTraceEnabled()) { Gson gson = new Gson(); @@ -241,11 +253,13 @@ public class ConnectionInvokerService { List<Object> params = new ArrayList<Object>(); params.add(msg.getMessageName()); params.add(msg.getMessage()); + if (log.isTraceEnabled()) { Gson gson = new Gson(); String json = gson.toJson(msg.getMessage()); log.trace("Broadcast message: " + msg.getMessageName() + " msg=" + json); } + ServiceUtils.invokeOnAllScopeConnections(meetingScope, "onMessageFromServer", params.toArray(), null); } } @@ -266,10 +280,10 @@ public class ConnectionInvokerService { } catch (ExecutionException e) { log.warn("ExecutionException while sending broadcast message[" + msg.getMessageName() + "]"); } catch (InterruptedException e) { - log.warn("Interrupted exception while sending direct message[" + msg.getMessageName() + "]"); + log.warn("Interrupted exception while sending broadcast message[" + msg.getMessageName() + "]"); Thread.currentThread().interrupt(); } catch (TimeoutException e) { - log.warn("Timeout exception while sending direct message[" + msg.getMessageName() + "]"); + log.warn("Timeout exception while sending broadcast message[" + msg.getMessageName() + "]"); f.cancel(true); } } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/DisconnectAllClientsMessage.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/DisconnectAllClientsMessage.java index ddedc077c5d646546fd8f7d11fea278e352a2a55..d3f833842953ba4034a946fe3acbfac25e7d8038 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/DisconnectAllClientsMessage.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/DisconnectAllClientsMessage.java @@ -11,4 +11,8 @@ public class DisconnectAllClientsMessage implements ClientMessage { public String getMeetingId() { return meetingId; } + + public String getMessageName() { + return "DisconnectAllClientsMessage"; + } } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/DisconnectAllMessage.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/DisconnectAllMessage.java index 080d0ee6e2a8abf3fa7e7979c10777c55c5ad52e..38fcbddc3a703439cf12608c4554f4ebd7eec913 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/DisconnectAllMessage.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/DisconnectAllMessage.java @@ -2,4 +2,7 @@ package org.bigbluebutton.red5.client.messaging; public class DisconnectAllMessage implements ClientMessage { + public String getMessageName() { + return "DisconnectAllMessage"; + } } diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/DisconnectClientMessage.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/DisconnectClientMessage.java index f0a9ba73ff34d8a8fe122fb97f2d6ca90c885264..fe8ce941263444f2fcdc5413b3d4c73b0eff5723 100755 --- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/DisconnectClientMessage.java +++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/red5/client/messaging/DisconnectClientMessage.java @@ -17,4 +17,8 @@ public class DisconnectClientMessage implements ClientMessage { public String getUserId() { return userId; } + + public String getMessageName() { + return "DisconnectClientMessage"; + } }