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.