You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2018/04/25 14:05:46 UTC
[openmeetings] branch 4.0.x updated: [OPENMEETINGS-1877] RPC calls
are added back
This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch 4.0.x
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/4.0.x by this push:
new b34adee [OPENMEETINGS-1877] RPC calls are added back
b34adee is described below
commit b34adee8d385c1e116c170f2043390b889818a7d
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Wed Apr 25 21:05:36 2018 +0700
[OPENMEETINGS-1877] RPC calls are added back
---
.../core/remote/ScopeApplicationAdapter.java | 27 ++++++--
.../apache/openmeetings/db/dto/room/CheckDto.java | 74 ++++++++++++++++++++++
openmeetings-flash/src/main/flex/main.mxml | 71 +++++++++++++--------
.../main/flex/org/apache/openmeetings/OmVideo.as | 7 +-
4 files changed, 141 insertions(+), 38 deletions(-)
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
index 78e417c..cd76dd4 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
@@ -37,7 +37,6 @@ import java.util.Map;
import java.util.UUID;
import org.apache.openmeetings.IApplication;
-import org.apache.openmeetings.core.converter.BaseConverter;
import org.apache.openmeetings.core.service.RecordingService;
import org.apache.openmeetings.core.util.IClientUtil;
import org.apache.openmeetings.core.util.WebSocketHelper;
@@ -48,6 +47,7 @@ import org.apache.openmeetings.db.dao.record.RecordingDao;
import org.apache.openmeetings.db.dao.room.RoomDao;
import org.apache.openmeetings.db.dao.room.SipDao;
import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.room.CheckDto;
import org.apache.openmeetings.db.entity.basic.Client;
import org.apache.openmeetings.db.entity.log.ConferenceLog;
import org.apache.openmeetings.db.entity.room.Room;
@@ -501,12 +501,6 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
String streamName = stream.getPublishedName();
_log.debug("start streamPublishStart broadcast start: {}, CONN {}", streamName, current);
c.setBroadcastId(streamName);
- final int sizeIdx = streamName.indexOf("__");
- if (sizeIdx > -1) {
- BaseConverter.Dimension d = BaseConverter.getDimension(streamName.substring(sizeIdx + 2));
- c.setWidth(d.getWidth());
- c.setHeight(d.getHeight());
- }
if (Client.Type.sharing != c.getType() && Client.Type.mobile != c.getType()) {
if (Strings.isEmpty(c.getAvsettings()) || "n".equals(c.getAvsettings())) {
@@ -1036,4 +1030,23 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
}
return count != null && count > 0 ? count - 1 : 0;
}
+
+ public CheckDto check() {
+ IConnection current = Red5.getConnectionLocal();
+ StreamClient c = streamClientManager.get(IClientUtil.getId(current.getClient()));
+ Client cl = clientManager.getBySid(c.getSid());
+ return new CheckDto(cl);
+ }
+
+ public void resize(Double width, Double height) {
+ if (width == null || height == null) {
+ return;
+ }
+ IConnection current = Red5.getConnectionLocal();
+ StreamClient c = streamClientManager.get(IClientUtil.getId(current.getClient()));
+ if (c == null) {
+ return;
+ }
+ streamClientManager.update(c.setWidth(width.intValue()).setHeight(height.intValue()));
+ }
}
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/CheckDto.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/CheckDto.java
new file mode 100644
index 0000000..1ef1d2b
--- /dev/null
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/CheckDto.java
@@ -0,0 +1,74 @@
+/*
+ * 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.db.dto.room;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.openmeetings.db.entity.basic.Client;
+import org.apache.openmeetings.db.entity.basic.Client.Activity;
+import org.apache.openmeetings.db.entity.basic.Client.Pod;
+import org.apache.openmeetings.db.entity.room.Room;
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class CheckDto {
+ private final long roomId;
+ private final Room.Type roomType;
+ private final boolean audioOnly;
+ private final Set<Activity> activities = new HashSet<>();
+ private final Pod pod;
+
+ public CheckDto(Client c) {
+ roomId = c.getRoom().getId();
+ roomType = c.getRoom().getType();
+ audioOnly = c.getRoom().isAudioOnly();
+ if (c.hasActivity(Activity.broadcastA)) {
+ activities.add(Activity.broadcastA);
+ }
+ if (c.hasActivity(Activity.broadcastV)) {
+ activities.add(Activity.broadcastV);
+ }
+ pod = c.getPod();
+ }
+
+ public long getRoomId() {
+ return roomId;
+ }
+
+ public Room.Type getRoomType() {
+ return roomType;
+ }
+
+ public boolean isAudioOnly() {
+ return audioOnly;
+ }
+
+ public Set<Activity> getActivities() {
+ return activities;
+ }
+
+ public Pod getPod() {
+ return pod;
+ }
+}
diff --git a/openmeetings-flash/src/main/flex/main.mxml b/openmeetings-flash/src/main/flex/main.mxml
index 2d2a378..d1bfa09 100644
--- a/openmeetings-flash/src/main/flex/main.mxml
+++ b/openmeetings-flash/src/main/flex/main.mxml
@@ -184,35 +184,50 @@
ExternalInterface.addCallback("setRights", setRightsCallback);
ExternalInterface.addCallback("cleanup", cleanupCallback);
video.connect(function ():void {
- checkAvPermissions(function ():void {
- addImage(params.width, params.height);
- _resize(params.width, params.height);
- _updateExclusive();
- activityTimer.addEventListener(TimerEvent.TIMER, broadcastTimerListener);
- refreshBroadcast(null);
- ExternalInterface.call("VideoManager.securityMode", params.uid, false);
- ExternalInterface.addCallback("refresh", refreshBroadcast);
- ExternalInterface.addCallback("update", function(c:Object):void {
- var pVideo:Boolean = hasVideo(), nVideo:Boolean = _hasVideo(c.activities)
- , pAudio:Boolean = hasAudio(), nAudio:Boolean = _hasAudio(c.activities);
- if (nVideo != pVideo || nAudio != pAudio) {
- // activities are changed
- activities = c.activities;
- if (nVideo && pVideo) {
- nAudio ? video.unmute() : video.mute();
- if (mic != null) {
- activityTimer.start();
- } else {
- activityTimer.stop();
- }
- } else {
- refreshBroadcast(null);
- }
- }
- _updateExclusive();
- //debug("Client updated: ", c);
+ // trust no-one
+ video.getNc().call("check", new Responder(function (check:Object):void {
+ debug("check", check);
+ audioOnly = check.audioOnly;
+ activities = check.activities;
+ interview = 'interview' == check.roomType;
+ checkAvPermissions(function ():void {
+ // trust no-one
+ video.getNc().call("check", new Responder(function (check:Object):void {
+ debug("check", check);
+ activities = check.activities;
+ addImage(params.width, params.height);
+ _resize(params.width, params.height);
+ _updateExclusive();
+ activityTimer.addEventListener(TimerEvent.TIMER, broadcastTimerListener);
+ refreshBroadcast(null);
+ ExternalInterface.call("VideoManager.securityMode", params.uid, false);
+ ExternalInterface.addCallback("refresh", refreshBroadcast);
+ ExternalInterface.addCallback("update", function ():void {
+ video.getNc().call("check", new Responder(function (check:Object):void {
+ debug("check", check);
+ var pVideo:Boolean = hasVideo(), nVideo:Boolean = _hasVideo(check.activities)
+ , pAudio:Boolean = hasAudio(), nAudio:Boolean = _hasAudio(check.activities);
+ if (nVideo != pVideo || nAudio != pAudio) {
+ // activities are changed
+ activities = check.activities;
+ if (nVideo && pVideo) {
+ nAudio ? video.unmute() : video.mute();
+ if (mic != null) {
+ activityTimer.start();
+ } else {
+ activityTimer.stop();
+ }
+ } else {
+ refreshBroadcast(null);
+ }
+ }
+ _updateExclusive();
+ //debug("Client updated: ", c);
+ }));
+ });
+ }));
});
- });
+ }))
});
}
break;
diff --git a/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as b/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
index bc863db..cd0a0e8 100644
--- a/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
+++ b/openmeetings-flash/src/main/flex/org/apache/openmeetings/OmVideo.as
@@ -193,8 +193,7 @@ public class OmVideo {
this.mic = _mic;
createStream();
- ns.publish(name + "__" + (cam === null ? 0 : cam.width) + "x" + (cam === null ? 0 : cam.height)
- , (mode === BROADCAST) ? LIVE : mode);
+ ns.publish(name, (mode === BROADCAST) ? LIVE : mode);
ns.attachCamera(cam);
attachCamera(cam);
if (cam !== null) {
@@ -307,7 +306,9 @@ public class OmVideo {
public function broadcast(name:String, cam:Camera, _mic:Microphone):void {
connect(function():void {
- _publish(BROADCAST, name, cam, _mic, null);
+ nc.call("resize", new Responder(function ():void {
+ _publish(BROADCAST, name, cam, _mic, null);
+ }), cam === null ? 0 : cam.width, cam === null ? 0 : cam.height);
});
}
--
To stop receiving notification emails like this one, please contact
solomax@apache.org.