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 d9ced71  [OPENMEETINGS-1854] basic work on WS code unification
d9ced71 is described below

commit d9ced712da2cbad8e412c13d2d48cb91644836fe
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Thu Mar 22 20:32:26 2018 +0700

    [OPENMEETINGS-1854] basic work on WS code unification
---
 .../apache/openmeetings/core/remote/KTestUser.java |  13 +-
 .../openmeetings/core/remote/KurentoHandler.java   |  33 +----
 .../openmeetings/core/util/WebSocketHelper.java    |  36 +++--
 .../apache/openmeetings/web/common/MainPanel.html  |   3 -
 .../apache/openmeetings/web/common/MainPanel.java  |  88 +++----------
 .../openmeetings/web/common/OmWebSocketPanel.java  | 146 +++++++++++++++++++++
 .../apache/openmeetings/web/pages/HashPage.java    |  52 +-------
 .../openmeetings/web/pages/auth/SignInDialog.java  |   4 -
 .../apache/openmeetings/web/room/settings-base.js  |  18 ++-
 .../apache/openmeetings/web/room/video-manager.js  |   2 +-
 10 files changed, 220 insertions(+), 175 deletions(-)

diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KTestUser.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KTestUser.java
index d371864..d273f44 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KTestUser.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KTestUser.java
@@ -29,6 +29,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.entity.basic.IWsClient;
 import org.kurento.client.Continuation;
 import org.kurento.client.EventListener;
@@ -71,7 +72,7 @@ public class KTestUser {
                        public void onEvent(RecordingEvent event) {
                                recTime = 0;
                                recHandle = scheduler.scheduleAtFixedRate(
-                                               () -> handler.sendClient(_c, 
newTestKurentoMsg().put("id", "testRecording").put("time", recTime++))
+                                               () -> 
WebSocketHelper.sendClient(_c, newTestKurentoMsg().put("id", 
"recording").put("time", recTime++))
                                                , 0, 1, TimeUnit.SECONDS);
                                scheduler.schedule(() -> {
                                                recorder.stop();
@@ -82,7 +83,7 @@ public class KTestUser {
                recorder.addStoppedListener(new EventListener<StoppedEvent>() {
                        @Override
                        public void onEvent(StoppedEvent event) {
-                               handler.sendClient(_c, 
newTestKurentoMsg().put("id", "testStopped"));
+                               WebSocketHelper.sendClient(_c, 
newTestKurentoMsg().put("id", "recStopped"));
                        }
                });
                switch (profile) {
@@ -110,8 +111,8 @@ public class KTestUser {
                        @Override
                        public void onEvent(IceCandidateFoundEvent event) {
                                IceCandidate cand = event.getCandidate();
-                               handler.sendClient(_c, newTestKurentoMsg()
-                                               .put("id", "testIceCandidate")
+                               WebSocketHelper.sendClient(_c, 
newTestKurentoMsg()
+                                               .put("id", "iceCandidate")
                                                .put("candidate", new 
JSONObject()
                                                                
.put("candidate", cand.getCandidate())
                                                                .put("sdpMid", 
cand.getSdpMid())
@@ -119,8 +120,8 @@ public class KTestUser {
                        }
                });
 
-               handler.sendClient(_c, newTestKurentoMsg()
-                               .put("id", "testStartResponse")
+               WebSocketHelper.sendClient(_c, newTestKurentoMsg()
+                               .put("id", "startResponse")
                                .put("sdpAnswer", sdpAnswer));
                webRtcEndpoint.gatherCandidates();
                recorder.record(new Continuation<Void>() {
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
index aae1cfc..26d0292 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
@@ -18,22 +18,16 @@
  */
 package org.apache.openmeetings.core.remote;
 
-import java.io.IOException;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 
+import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.basic.IWsClient;
 import org.apache.openmeetings.db.manager.IClientManager;
-import org.apache.wicket.Application;
-import org.apache.wicket.protocol.ws.WebSocketSettings;
-import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
-import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry;
-import org.apache.wicket.protocol.ws.api.registry.PageIdKey;
-import org.apache.wicket.protocol.ws.concurrent.Executor;
 import org.kurento.client.IceCandidate;
 import org.kurento.client.KurentoClient;
 import org.slf4j.Logger;
@@ -54,8 +48,6 @@ public class KurentoHandler {
 
        @Autowired
        private IClientManager clientManager;
-       @Autowired
-       private Application app;
 
        @PostConstruct
        private void init() {
@@ -79,14 +71,14 @@ public class KurentoHandler {
                if ("test".equals(msg.getString("mode"))) {
                        KTestUser user = getTestByUid(_c.getUid());
                        switch (cmdId) {
-                               case "testStart":
+                               case "start":
                                {
                                        //TODO FIXME assert null user ???
                                        user = new KTestUser(_c, msg, this, 
client.createMediaPipeline());
                                        testsByUid.put(_c.getUid(), user);
                                }
                                        break;
-                               case "onTestIceCandidate":
+                               case "iceCandidate":
                                {
                                        JSONObject candidate = 
msg.getJSONObject("candidate");
 
@@ -147,24 +139,7 @@ public class KurentoHandler {
        }
 
        public void sendClient(String uid, JSONObject msg) {
-               sendClient(clientManager.get(uid), msg);
-       }
-
-       //FIXME TODO UNIFY THIS
-       void sendClient(IWsClient client, JSONObject msg) {
-               WebSocketSettings settings = WebSocketSettings.Holder.get(app);
-               IWebSocketConnectionRegistry reg = 
settings.getConnectionRegistry();
-               Executor executor = settings.getWebSocketPushMessageExecutor(); 
//FIXME TODO
-               final IWebSocketConnection wc = reg.getConnection(app, 
client.getSessionId(), new PageIdKey(client.getPageId()));
-               if (wc != null && wc.isOpen()) {
-                       executor.run(() -> {
-                               try {
-                                       wc.sendMessage(msg.toString());
-                               } catch (IOException e) {
-                                       log.error("Error while sending message 
to client", e);
-                               }
-                       });
-               }
+               WebSocketHelper.sendClient(clientManager.get(uid), msg);
        }
 
        /**
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java
index 5e2b568..c49263c 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/util/WebSocketHelper.java
@@ -22,10 +22,10 @@ import static 
org.apache.openmeetings.core.remote.ScopeApplicationAdapter.getApp
 import static org.apache.openmeetings.db.util.FormatHelper.getDisplayName;
 
 import java.io.IOException;
-import java.util.Arrays;
 import java.util.List;
 import java.util.function.BiConsumer;
 import java.util.function.BiFunction;
+import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Predicate;
 
@@ -38,6 +38,7 @@ import org.apache.openmeetings.core.util.ws.WsMessageRoomMsg;
 import org.apache.openmeetings.core.util.ws.WsMessageUser;
 import org.apache.openmeetings.db.entity.basic.ChatMessage;
 import org.apache.openmeetings.db.entity.basic.Client;
+import org.apache.openmeetings.db.entity.basic.IWsClient;
 import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.manager.IClientManager;
@@ -109,27 +110,40 @@ public class WebSocketHelper {
                        .put("msg", arr);
        }
 
-       public static void sendClient(final Client _c, byte[] b) {
+       public static void sendClient(final IWsClient _c, byte[] b) {
                if (_c != null) {
-                       send(a -> Arrays.asList(_c), (t, c) -> {
+                       sendClient(_c, c -> {
                                try {
-                                       t.sendMessage(b, 0, b.length);
+                                       c.sendMessage(b, 0, b.length);
                                } catch (IOException e) {
-                                       log.error("Error while broadcasting 
byte[] to room", e);
+                                       log.error("Error while sending binary 
message to client", e);
                                }
-                       }, null);
+                       });
                }
        }
 
-       public static void sendClient(final Client _c, JSONObject msg) { //TODO 
unify
+       public static void sendClient(final IWsClient _c, JSONObject msg) {
                if (_c != null) {
-                       send(a -> Arrays.asList(_c), (t, c) -> {
+                       sendClient(_c, c -> {
                                try {
-                                       t.sendMessage(msg.toString());
+                                       c.sendMessage(msg.toString());
                                } catch (IOException e) {
-                                       log.error("Error while broadcasting 
byte[] to room", e);
+                                       log.error("Error while sending message 
to client", e);
                                }
-                       }, null);
+                       });
+               }
+       }
+
+       private static void sendClient(IWsClient client, 
Consumer<IWebSocketConnection> wsc) {
+               Application app = (Application)getApp();
+               WebSocketSettings settings = WebSocketSettings.Holder.get(app);
+               IWebSocketConnectionRegistry reg = 
settings.getConnectionRegistry();
+               Executor executor = settings.getWebSocketPushMessageExecutor(); 
//FIXME TODO
+               final IWebSocketConnection wc = reg.getConnection(app, 
client.getSessionId(), new PageIdKey(client.getPageId()));
+               if (wc != null && wc.isOpen()) {
+                       executor.run(() -> {
+                               wsc.accept(wc);
+                       });
                }
        }
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.html
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.html
index a0f8232..d8e33da 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.html
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.html
@@ -35,9 +35,6 @@
                        
Wicket.Event.subscribe(Wicket.Event.Topic.AJAX_CALL_BEFORE, showBusyIndicator);
                        
Wicket.Event.subscribe(Wicket.Event.Topic.AJAX_CALL_SUCCESS, hideBusyIndicator);
                        
Wicket.Event.subscribe(Wicket.Event.Topic.AJAX_CALL_COMPLETE, 
hideBusyIndicator);
-                       
Wicket.Event.subscribe(Wicket.Event.Topic.WebSocket.Opened, function() {
-                               Wicket.WebSocket.send("socketConnected");
-                       });
                });
        </script>
        <div wicket:id="topControls">
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 54b2b31..dbcde27 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
@@ -18,7 +18,6 @@
  */
 package org.apache.openmeetings.web.common;
 
-import static org.apache.openmeetings.core.remote.KurentoHandler.KURENTO_TYPE;
 import static org.apache.openmeetings.db.util.AuthLevelUtil.hasAdminLevel;
 import static org.apache.openmeetings.db.util.AuthLevelUtil.hasGroupAdminLevel;
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MYROOMS_ENABLED;
@@ -36,12 +35,11 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
-import org.apache.openmeetings.core.remote.KurentoHandler;
-import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.basic.Client;
+import org.apache.openmeetings.db.entity.basic.IWsClient;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.user.PrivateMessage;
 import org.apache.openmeetings.db.entity.user.User.Right;
@@ -65,7 +63,6 @@ import 
org.apache.openmeetings.web.util.OmUrlFragment.MenuActions;
 import org.apache.openmeetings.web.util.OmUrlFragment.MenuParams;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
@@ -77,16 +74,10 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.panel.EmptyPanel;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
 import org.apache.wicket.protocol.ws.api.WebSocketRequestHandler;
-import org.apache.wicket.protocol.ws.api.message.AbortedMessage;
 import org.apache.wicket.protocol.ws.api.message.AbstractClientMessage;
-import org.apache.wicket.protocol.ws.api.message.ClosedMessage;
 import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
-import org.apache.wicket.protocol.ws.api.message.ErrorMessage;
-import org.apache.wicket.protocol.ws.api.message.TextMessage;
 import org.apache.wicket.spring.injection.annot.SpringBean;
-import org.apache.wicket.util.time.Duration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.wicketstuff.urlfragment.UrlFragment;
@@ -110,26 +101,15 @@ public class MainPanel extends Panel {
        private UserInfoDialog userInfo;
        private BasePanel panel;
        private InviteUserToRoomDialog inviteUser;
-       private AbstractAjaxTimerBehavior pingTimer = new 
AbstractAjaxTimerBehavior(Duration.seconds(30)) {
-               private static final long serialVersionUID = 1L;
-
-               @Override
-               protected void onTimer(AjaxRequestTarget target) {
-                       log.debug("Sending WebSocket PING");
-                       WebSocketHelper.sendClient(getClient(), new 
byte[]{getUserId().byteValue()});
-               }
-       };
 
        @SpringBean
-       private transient KurentoHandler kHandler;
+       private ClientManager clientManager;
        @SpringBean
-       private transient ClientManager clientManager;
+       private ConfigurationDao cfgDao;
        @SpringBean
-       private transient ConfigurationDao cfgDao;
+       private UserDao userDao;
        @SpringBean
-       private transient UserDao userDao;
-       @SpringBean
-       private transient RoomDao roomDao;
+       private RoomDao roomDao;
 
        public MainPanel(String id) {
                this(id, null);
@@ -141,13 +121,11 @@ public class MainPanel extends Panel {
                setAuto(true);
                setOutputMarkupId(true);
                setOutputMarkupPlaceholderTag(true);
-               pingTimer.stop(null);
-               add(pingTimer, new WebSocketBehavior() {
+               add(new OmWebSocketPanel("ws-panel") {
                        private static final long serialVersionUID = 1L;
 
                        @Override
                        protected void onConnect(ConnectedMessage msg) {
-                               super.onConnect(msg);
                                ExtendedClientProperties cp = 
WebSession.get().getExtendedProperties();
                                final Client client = new 
Client(getSession().getId(), msg.getKey().hashCode(), getUserId(), userDao);
                                uid = client.getUid();
@@ -156,57 +134,33 @@ public class MainPanel extends Panel {
                        }
 
                        @Override
-                       protected void onMessage(WebSocketRequestHandler 
handler, TextMessage msg) {
-                               if ("socketConnected".equals(msg.getText())) {
-                                       if (panel != null) {
-                                               updateContents(panel, handler);
-                                       }
-                                       log.debug("WebSocketBehavior:: 
pingTimer is attached");
-                                       pingTimer.restart(handler);
-                               } else {
-                                       final JSONObject m;
-                                       try {
-                                               m = new 
JSONObject(msg.getText());
-                                               if 
(KURENTO_TYPE.equals(m.optString("type"))) {
-                                                       
kHandler.onMessage(getClient(), m);
-                                               } else {
-                                                       BasePanel p = 
getCurrentPanel();
-                                                       if (p != null) {
-                                                               
p.process(handler, m);
-                                                       }
-                                               }
-                                       } catch (Exception e) {
-                                               //no-op
-                                       }
+                       protected void onConnect(WebSocketRequestHandler 
handler) {
+                               if (panel != null) {
+                                       updateContents(panel, handler);
                                }
                        }
 
                        @Override
-                       protected void onAbort(AbortedMessage msg) {
-                               super.onAbort(msg);
-                               closeHandler(msg);
-                       }
-
-                       @Override
-                       protected void onClose(ClosedMessage msg) {
-                               super.onClose(msg);
-                               closeHandler(msg);
+                       protected void onMessage(WebSocketRequestHandler 
handler, JSONObject m) {
+                               BasePanel p = getCurrentPanel();
+                               if (p != null) {
+                                       p.process(handler, m);
+                               }
                        }
 
                        @Override
-                       protected void onError(WebSocketRequestHandler handler, 
ErrorMessage msg) {
-                               super.onError(handler, msg);
-                               closeHandler(msg);
-                       }
-
-                       private void closeHandler(AbstractClientMessage msg) {
-                               log.debug("WebSocketBehavior::closeHandler 
[uid: {}, session: {}, key: {}]", uid, msg.getSessionId(), msg.getKey());
-                               //no chance to stop pingTimer here :(
+                       protected void closeHandler(AbstractClientMessage msg) {
+                               super.closeHandler(msg);
                                if (uid != null) {
                                        clientManager.exit(getClient());
                                        uid = null;
                                }
                        }
+
+                       @Override
+                       protected IWsClient getWsClient() {
+                               return getClient();
+                       }
                });
        }
 
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
new file mode 100644
index 0000000..019724f
--- /dev/null
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmWebSocketPanel.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+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 org.apache.openmeetings.core.remote.KurentoHandler;
+import org.apache.openmeetings.core.util.WebSocketHelper;
+import org.apache.openmeetings.db.entity.basic.IWsClient;
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
+import org.apache.wicket.protocol.ws.api.WebSocketRequestHandler;
+import org.apache.wicket.protocol.ws.api.message.AbortedMessage;
+import org.apache.wicket.protocol.ws.api.message.AbstractClientMessage;
+import org.apache.wicket.protocol.ws.api.message.ClosedMessage;
+import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
+import org.apache.wicket.protocol.ws.api.message.ErrorMessage;
+import org.apache.wicket.protocol.ws.api.message.TextMessage;
+import org.apache.wicket.spring.injection.annot.SpringBean;
+import org.apache.wicket.util.time.Duration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.openjson.JSONObject;
+
+public abstract class OmWebSocketPanel extends Panel {
+       private static final long serialVersionUID = 1L;
+       private static final Logger log = 
LoggerFactory.getLogger(OmWebSocketPanel.class);
+       private static final String CONNECTED_MSG = "socketConnected";
+       private final AbstractAjaxTimerBehavior pingTimer = new 
AbstractAjaxTimerBehavior(Duration.seconds(30)) {
+               private static final long serialVersionUID = 1L;
+
+               @Override
+               protected void onTimer(AjaxRequestTarget target) {
+                       log.debug("Sending WebSocket PING");
+                       WebSocketHelper.sendClient(getWsClient(), new 
byte[]{getUserId().byteValue()});
+               }
+       };
+       private final WebSocketBehavior wsBehavior = new WebSocketBehavior() {
+               private static final long serialVersionUID = 1L;
+
+               @Override
+               public void renderHead(Component component, IHeaderResponse 
response) {
+                       super.renderHead(component, response);
+                       response.render(JavaScriptHeaderItem.forScript(
+                                       
String.format("Wicket.Event.subscribe(Wicket.Event.Topic.WebSocket.Opened, 
function() {Wicket.WebSocket.send('%s');});",CONNECTED_MSG)
+                                       , "ws-connected-script"));
+               }
+
+               @Override
+               protected void onConnect(ConnectedMessage message) {
+                       super.onConnect(message);
+                       OmWebSocketPanel.this.onConnect(message);
+               }
+
+               @Override
+               protected void onMessage(WebSocketRequestHandler handler, 
TextMessage msg) {
+                       if ("socketConnected".equals(msg.getText())) {
+                               OmWebSocketPanel.this.onConnect(handler);
+                               log.debug("WebSocketBehavior:: pingTimer is 
attached");
+                               pingTimer.restart(handler);
+                       } else {
+                               final JSONObject m;
+                               try {
+                                       m = new JSONObject(msg.getText());
+                                       if 
(KURENTO_TYPE.equals(m.optString("type"))) {
+                                               
kHandler.onMessage(getWsClient(), m);
+                                       } else {
+                                               
OmWebSocketPanel.this.onMessage(handler, m);
+                                       }
+                               } catch (Exception e) {
+                                       //no-op
+                               }
+                       }
+               }
+
+               @Override
+               protected void onAbort(AbortedMessage msg) {
+                       super.onAbort(msg);
+                       closeHandler(msg);
+               }
+
+               @Override
+               protected void onClose(ClosedMessage msg) {
+                       super.onClose(msg);
+                       closeHandler(msg);
+               }
+
+               @Override
+               protected void onError(WebSocketRequestHandler handler, 
ErrorMessage msg) {
+                       super.onError(handler, msg);
+                       closeHandler(msg);
+               }
+       };
+       @SpringBean
+       private transient KurentoHandler kHandler;
+
+       public OmWebSocketPanel(String id) {
+               super(id);
+               add(pingTimer, wsBehavior);
+               pingTimer.stop(null);
+       }
+
+       protected abstract IWsClient getWsClient();
+
+       protected void onConnect(ConnectedMessage message) {
+       }
+
+       protected void onConnect(WebSocketRequestHandler handler) {
+       }
+
+       protected void closeHandler(AbstractClientMessage msg) {
+               log.debug("WebSocketBehavior::closeHandler {}", msg);
+       }
+
+       protected void onMessage(WebSocketRequestHandler handler, JSONObject m) 
{
+       }
+
+       @Override
+       protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {
+               return null;
+       }
+}
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
index 3a527d5..a7d09d0 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
@@ -18,14 +18,13 @@
  */
 package org.apache.openmeetings.web.pages;
 
-import static org.apache.openmeetings.core.remote.KurentoHandler.KURENTO_TYPE;
 import static org.apache.openmeetings.web.app.WebSession.getRecordingId;
 import static org.apache.openmeetings.web.util.OmUrlFragment.CHILD_ID;
 
 import org.apache.commons.lang3.time.FastDateFormat;
-import org.apache.openmeetings.core.remote.KurentoHandler;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.entity.basic.IWsClient;
 import org.apache.openmeetings.db.entity.basic.WsClient;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.room.Invitation;
@@ -36,6 +35,7 @@ import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.IUpdatable;
 import org.apache.openmeetings.web.common.MainPanel;
 import org.apache.openmeetings.web.common.OmAjaxClientInfoBehavior;
+import org.apache.openmeetings.web.common.OmWebSocketPanel;
 import org.apache.openmeetings.web.room.NetTestPanel;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.openmeetings.web.room.VideoSettings;
@@ -48,14 +48,7 @@ import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.panel.EmptyPanel;
 import org.apache.wicket.protocol.http.request.WebClientInfo;
-import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
-import org.apache.wicket.protocol.ws.api.WebSocketRequestHandler;
-import org.apache.wicket.protocol.ws.api.message.AbortedMessage;
-import org.apache.wicket.protocol.ws.api.message.AbstractClientMessage;
-import org.apache.wicket.protocol.ws.api.message.ClosedMessage;
 import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
-import org.apache.wicket.protocol.ws.api.message.ErrorMessage;
-import org.apache.wicket.protocol.ws.api.message.TextMessage;
 import org.apache.wicket.request.IRequestParameters;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.spring.injection.annot.SpringBean;
@@ -63,7 +56,6 @@ import org.apache.wicket.util.string.StringValue;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.github.openjson.JSONObject;
 import com.googlecode.wicket.jquery.core.JQueryBehavior;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
 import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
@@ -89,8 +81,6 @@ public class HashPage extends BaseInitedPage implements 
IUpdatable {
        private final PageParameters p;
 
        @SpringBean
-       private transient KurentoHandler kHandler;
-       @SpringBean
        private transient RoomDao roomDao;
        @SpringBean
        private transient RecordingDao recDao;
@@ -189,50 +179,18 @@ public class HashPage extends BaseInitedPage implements 
IUpdatable {
                                                        target.appendJavaScript(
                                                                        
String.format("VideoSettings.init(%s);VideoSettings.open();", 
VideoSettings.getInitJson("noclient")));
                                                }
-                                       }, new WebSocketBehavior() { //This WS 
will not be created in room
+                                       }, new OmWebSocketBehavior("ws-panel") {
                                                private static final long 
serialVersionUID = 1L;
                                                private WsClient c = null;
 
                                                @Override
                                                protected void 
onConnect(ConnectedMessage message) {
-                                                       
super.onConnect(message);
                                                        c = new 
WsClient(message.getSessionId(), message.getKey().hashCode());
                                                }
 
                                                @Override
-                                               protected void 
onMessage(WebSocketRequestHandler handler, TextMessage msg) {
-                                                       final JSONObject m;
-                                                       try {
-                                                               m = new 
JSONObject(msg.getText());
-                                                               if 
(KURENTO_TYPE.equals(m.optString("type"))) {
-                                                                       
kHandler.onMessage(c, m);
-                                                               }
-                                                       } catch (Exception e) {
-                                                               //no-op
-                                                       }
-                                               }
-
-                                               @Override
-                                               protected void 
onAbort(AbortedMessage msg) {
-                                                       super.onAbort(msg);
-                                                       closeHandler(msg);
-                                               }
-
-                                               @Override
-                                               protected void 
onClose(ClosedMessage msg) {
-                                                       super.onClose(msg);
-                                                       closeHandler(msg);
-                                               }
-
-                                               @Override
-                                               protected void 
onError(WebSocketRequestHandler handler, ErrorMessage msg) {
-                                                       super.onError(handler, 
msg);
-                                                       closeHandler(msg);
-                                               }
-
-                                               private void 
closeHandler(AbstractClientMessage msg) {
-                                                       
log.debug("HashPage::WebSocketBehavior::closeHandler {}", msg);
-                                                       //TODO FIXME perform 
Kurento clean-up (is this necessary???)
+                                               protected IWsClient 
getWsClient() {
+                                                       return c;
                                                }
                                        }));
                                error = false;
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
index 1a2d078..6f54be1 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
@@ -65,7 +65,6 @@ import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -91,9 +90,6 @@ public class SignInDialog extends NonClosableDialog<String> {
        private LdapConfig domain;
        private final KendoFeedbackPanel feedback = new 
KendoFeedbackPanel("feedback", new Options("button", true));
 
-       @SpringBean
-       private transient ConfigurationDao cfgDao;
-
        public SignInDialog(String id) {
                super(id, "");
                add(form = new SignInForm("signin"));
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings-base.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings-base.js
index 3884f30..e31441c 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings-base.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/settings-base.js
@@ -119,7 +119,7 @@ var VideoSettings = (function() {
                        console.info('Invoking SDP offer callback function');
                        const cnts = _constraints();
                        OmUtil.sendMessage({
-                               id : 'testStart'
+                               id : 'start'
                                , type: 'kurento'
                                , mode: 'test'
                                , sdpOffer: offerSdp
@@ -129,7 +129,7 @@ var VideoSettings = (function() {
                        rtcPeer.on('icecandidate', function (candidate) {
                                        console.log('Local candidate' + 
JSON.stringify(candidate));
                                        OmUtil.sendMessage({
-                                               id : 'onTestIceCandidate'
+                                               id : 'iceCandidate'
                                                , type: 'kurento'
                                                , mode: 'test'
                                                , candidate: candidate
@@ -204,7 +204,6 @@ var VideoSettings = (function() {
                } else {
                        cnts.video = false;
                }
-               //TODO enable audio for recordings only
                if (s.video.mic > -1) {
                        //TODO remove hardcodings
                        cnts.audio = {
@@ -349,7 +348,7 @@ var VideoSettings = (function() {
                        if (m && 'kurento' === m.type && 'test' === m.mode) {
                                console.info('Received message: ', m);
                                switch (m.id) {
-                                       case 'testStartResponse':
+                                       case 'startResponse':
                                                console.log('SDP answer 
received from server. Processing ...');
 
                                                
rtcPeer.processAnswer(m.sdpAnswer, function(error) {
@@ -358,18 +357,23 @@ var VideoSettings = (function() {
                                                        }
                                                });
                                                break;
-                                       case 'testIceCandidate':
+                                       case 'iceCandidate':
                                                
rtcPeer.addIceCandidate(m.candidate, function(error) {
                                                        if (error) {
                                                                return 
_error('Error adding candidate: ' + error);
                                                        }
                                                });
                                                break;
-                                       case 'testRecording':
+                                       case 'recording':
                                                
timer.show().find('.time').text(m.time);
                                                break;
-                                       case 'testStopped':
+                                       case 'recStopped':
                                                timer.hide();
+                                               recBtn.prop('disabled', 
false).button('refresh');
+                                               playBtn.prop('disabled', 
false).button('refresh');
+                                               cam.prop('disabled', false);
+                                               mic.prop('disabled', false);
+                                               res.prop('disabled', false);
                                                break;
                                        default:
                                                _error('Unrecognized message: ' 
+ msg);
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video-manager.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video-manager.js
index 97fb1e7..7da3866 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video-manager.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video-manager.js
@@ -72,7 +72,7 @@ var VideoManager = (function() {
                                return; //ping
                        }
                        const m = jQuery.parseJSON(msg);
-                       if (m && 'kurento' === m.type) {
+                       if (m && 'kurento' === m.type && 'test' !== m.mode) {
                                console.info('Received message: ' + m);
 
                                switch (m.id) {

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to