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].