This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new a4db988  [OPENMEETINGS-2049] room via hash seems to be more stable
a4db988 is described below

commit a4db988ead738101c5e1a46261161c21e485761d
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Wed Mar 27 18:10:10 2019 +0700

    [OPENMEETINGS-2049] room via hash seems to be more stable
---
 .../java/org/apache/openmeetings/web/common/MainPanel.java   |  8 ++++----
 .../org/apache/openmeetings/web/common/OmWebSocketPanel.java | 11 ++++++++---
 .../java/org/apache/openmeetings/web/room/wb/raw-wb-board.js | 12 +++++++++---
 3 files changed, 21 insertions(+), 10 deletions(-)

diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
index 73eee59..934594e 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
@@ -124,6 +124,10 @@ public class MainPanel extends Panel {
                setAuto(true);
                setOutputMarkupId(true);
                setOutputMarkupPlaceholderTag(true);
+       }
+
+       @Override
+       protected void onInitialize() {
                add(new OmWebSocketPanel("ws-panel") {
                        private static final long serialVersionUID = 1L;
 
@@ -182,10 +186,6 @@ public class MainPanel extends Panel {
                                return getClient();
                        }
                });
-       }
-
-       @Override
-       protected void onInitialize() {
                menu = new MenuPanel("menu", getMainMenu());
                
add(topControls.setOutputMarkupPlaceholderTag(true).setMarkupId("topControls"));
                add(contents.add(getClient() == null || panel == null ? EMPTY : 
panel).setOutputMarkupId(true).setMarkupId("contents"));
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmWebSocketPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmWebSocketPanel.java
index f626da9..868c819 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmWebSocketPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmWebSocketPanel.java
@@ -21,6 +21,8 @@ package org.apache.openmeetings.web.common;
 import static org.apache.openmeetings.core.remote.KurentoHandler.KURENTO_TYPE;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
+import java.util.concurrent.atomic.AtomicBoolean;
+
 import org.apache.openmeetings.core.remote.KurentoHandler;
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.entity.basic.Client;
@@ -51,6 +53,7 @@ public abstract class OmWebSocketPanel extends Panel {
        private static final long serialVersionUID = 1L;
        private static final Logger log = 
LoggerFactory.getLogger(OmWebSocketPanel.class);
        public static final String CONNECTED_MSG = "socketConnected";
+       private final AtomicBoolean connected = new AtomicBoolean();
        private final AbstractAjaxTimerBehavior pingTimer = new 
AbstractAjaxTimerBehavior(Duration.seconds(30)) {
                private static final long serialVersionUID = 1L;
 
@@ -80,9 +83,11 @@ public abstract class OmWebSocketPanel extends Panel {
                @Override
                protected void onMessage(WebSocketRequestHandler handler, 
TextMessage msg) {
                        if (CONNECTED_MSG.equals(msg.getText())) {
-                               OmWebSocketPanel.this.onConnect(handler);
-                               log.debug("WebSocketBehavior:: pingTimer is 
attached");
-                               pingTimer.restart(handler);
+                               if (connected.compareAndSet(false, true)) {
+                                       
OmWebSocketPanel.this.onConnect(handler);
+                                       log.debug("WebSocketBehavior:: 
pingTimer is attached");
+                                       pingTimer.restart(handler);
+                               }
                        } else {
                                final JSONObject m;
                                try {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-wb-board.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-wb-board.js
index 698bdf0..a2bb582 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-wb-board.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-wb-board.js
@@ -15,9 +15,15 @@ var Wb = function() {
        function _setActive() {
                !!t && t.find('.om-icon.' + mode).addClass(ACTIVE);
        }
+       function __validBtn(btn) {
+               return !!btn && btn.length === 1
+                       && typeof(btn.data) === 'function'
+                       && typeof(btn.data()) === 'object'
+                       && typeof(btn.data().deactivate) === 'function';
+       }
        function _btnClick(toolType) {
                const b = _getBtn();
-               if (b.length && b.hasClass(ACTIVE)) {
+               if (__validBtn(b)) {
                        b.data().deactivate();
                }
                _cleanActive();
@@ -474,7 +480,7 @@ var Wb = function() {
                                _updateZoomPanel();
                                if (ccount !== canvases.length) {
                                        const b = _getBtn();
-                                       if (b.length && b.hasClass(ACTIVE)) {
+                                       if (__validBtn(b)) {
                                                b.data().deactivate();
                                                b.data().activate();
                                        }
@@ -753,7 +759,7 @@ var Wb = function() {
        wb.setRole = function(_role) {
                if (role !== _role) {
                        const btn = _getBtn();
-                       if (!!btn && btn.length === 1) {
+                       if (__validBtn(btn)) {
                                btn.data().deactivate();
                        }
                        a.find('.tools').remove();

Reply via email to