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 2017/09/19 09:27:58 UTC

openmeetings git commit: [OPENMEETINGS-1706] initial commit on remote control

Repository: openmeetings
Updated Branches:
  refs/heads/master f7ba0e96f -> d7fe8012b


[OPENMEETINGS-1706] initial commit on remote control


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/d7fe8012
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/d7fe8012
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/d7fe8012

Branch: refs/heads/master
Commit: d7fe8012b17721b064fbc014b80928ea66d6f175
Parents: f7ba0e9
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Tue Sep 19 16:27:51 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Tue Sep 19 16:27:51 2017 +0700

----------------------------------------------------------------------
 .../core/remote/ScopeApplicationAdapter.java    |  5 +-
 openmeetings-flash/src/main/flex/main.mxml      | 59 +++++++++++--
 .../openmeetings/screenshare/job/RemoteJob.java | 92 ++++++++++++--------
 .../org/apache/openmeetings/web/room/room.js    |  4 +-
 4 files changed, 111 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d7fe8012/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
----------------------------------------------------------------------
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 5398a12..737c5d3 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
@@ -869,14 +869,13 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 		return 1;
 	}
 
-	@SuppressWarnings({ "rawtypes" })
-	public boolean sendRemoteCursorEvent(final String streamid, Map messageObj) {
+	public boolean sendRemoteCursorEvent(final String uid, Map<String, Object> messageObj) {
 		new MessageSender("sendRemoteCursorEvent", messageObj, this) {
 
 			@Override
 			public boolean filter(IConnection conn) {
 				IClient client = conn.getClient();
-				return !IClientUtil.isSharing(client) || !conn.getClient().getId().equals(streamid);
+				return uid == null || !IClientUtil.isSharing(client) || !IClientUtil.getId(client).equals(uid);
 			}
 		}.start();
 		return true;

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d7fe8012/openmeetings-flash/src/main/flex/main.mxml
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/flex/main.mxml b/openmeetings-flash/src/main/flex/main.mxml
index 9109335..47f42b7 100644
--- a/openmeetings-flash/src/main/flex/main.mxml
+++ b/openmeetings-flash/src/main/flex/main.mxml
@@ -32,6 +32,7 @@
 		import mx.graphics.SolidColor;
 		import mx.utils.UIDUtil;
 		import flash.events.MouseEvent;
+		import flash.events.KeyboardEvent;
 
 		import org.apache.openmeetings.OmVideo;
 
@@ -53,6 +54,9 @@
 		private var active:Boolean = false;
 		private var userId:String = null;
 		private var cuid:String = null;
+		private var type:String = null;
+		private var params:Object;
+
 		[Bindable]
 		private var interview:Boolean = false;
 		[Embed(source="assets/micro.png")]
@@ -92,6 +96,10 @@
 			return _hasVideo(activities);
 		}
 
+		private function hasRightRemoteControl():Boolean {
+			return rights.indexOf('remoteControl') > -1 || rights.indexOf('moderator') > -1 || rights.indexOf('superModerator') > -1;
+		}
+
 		private function hasRightExclusive():Boolean {
 			return rights.indexOf('exclusive') > -1 || rights.indexOf('moderator') > -1 || rights.indexOf('superModerator') > -1;
 		}
@@ -102,7 +110,7 @@
 		}
 
 		private function appInit(evt:Event):void {
-			var params:Object = FlexGlobals.topLevelApplication.parameters;
+			this.params = FlexGlobals.topLevelApplication.parameters;
 			debug("appInit()", params);
 			audioOnly = 'true' == params.audioOnly;
 			interview = 'true' == params.interview;
@@ -117,6 +125,7 @@
 			rights = params.rights == null ? [] : params.rights.split(',');
 			userId = params.userId;
 			cuid = params.cuid;
+			type = params.type;
 			switch (params.mode) {
 				case 'settings': {
 					ExternalInterface.addCallback("getDevices", function ():Object {
@@ -216,6 +225,7 @@
 					_resize(params.width, params.height);
 					refreshCallback(null);
 					_updateExclusive();
+					_updateRemote();
 					ExternalInterface.addCallback("setVolume", function (vol:int):void {
 						video.setStreamVolume(vol);
 					});
@@ -245,18 +255,55 @@
 			}
 		}
 
-		private function exclMouseOutHandler(event:MouseEvent):void {
+		private function exclMouseOutHandler(evt:MouseEvent):void {
 			exclusiveMic.visible = false;
 		}
 
-		private function exclMouseOverHandler(event:MouseEvent):void {
+		private function exclMouseOverHandler(evt:MouseEvent):void {
 			exclusiveMic.visible = true;
 		}
 
-		private function exclMouseClickHandler(event:MouseEvent):void {
+		private function exclMouseClickHandler(evt:MouseEvent):void {
 			ExternalInterface.call("VideoManager.clickExclusive", cuid);
 		}
 
+		private function _updateRemote():void {
+			if ("sharing" === type && hasRightRemoteControl()) {
+				addEventListener(MouseEvent.MOUSE_DOWN, remoteMouseDownHandler);
+				addEventListener(MouseEvent.MOUSE_UP, remoteMouseUpHandler);
+				addEventListener(MouseEvent.MOUSE_MOVE, remoteMouseMoveHandler);
+				addEventListener(KeyboardEvent.KEY_DOWN, remoteKeyDownHandler);
+			} else {
+				removeEventListener(MouseEvent.MOUSE_DOWN, remoteMouseDownHandler);
+				removeEventListener(MouseEvent.MOUSE_UP, remoteMouseUpHandler);
+				removeEventListener(MouseEvent.MOUSE_MOVE, remoteMouseMoveHandler);
+				removeEventListener(KeyboardEvent.KEY_DOWN, remoteKeyDownHandler);
+			}
+		}
+
+		private function remoteMouseDownHandler(evt:MouseEvent):void {
+		}
+
+		private function remoteMouseUpHandler(evt:MouseEvent):void {
+		}
+
+		private function remoteMouseMoveHandler(evt:MouseEvent):void {
+			video.getNc().call(
+				"sendRemoteCursorEvent"
+				, new Responder(function (res:Object):void {})
+				, params.uid, {
+					action: 'mousePos'
+					, x: evt.localX
+					, y: evt.localY
+					, alt: evt.altKey
+					, ctrl: evt.ctrlKey
+					, shift: evt.shiftKey
+				});
+		}
+
+		private function remoteKeyDownHandler(evt:KeyboardEvent):void {
+		}
+
 		private function _resize(_width:int, _height:int):void {
 			userImage.width = _width;
 			userImage.height = _height;
@@ -298,10 +345,10 @@
 			debug("setRightsCallback", _rights);
 			rights = _rights;
 			_updateExclusive();
+			_updateRemote();
 		}
 
 		private function refreshCallback(opts:Object):void {
-			var params:Object = FlexGlobals.topLevelApplication.parameters;
 			video.reset();
 			video.play(params.broadcastId); // TODO audio/video
 			video.resetStreamVolume();
@@ -371,7 +418,6 @@
 		}
 
 		private function checkAvPermissions(callback:Function):void {
-			var params:Object = FlexGlobals.topLevelApplication.parameters;
 			debug("Camera selected:: " + selectedCam);
 			var cam:Camera = getCam();
 			debug("Camera selected:: " + cam, cam == null ? '' : cam.muted);
@@ -473,7 +519,6 @@
 		}
 
 		private function broadcastTimerListener(event:TimerEvent):void {
-			var params:Object = FlexGlobals.topLevelApplication.parameters;
 			var _active:Boolean = mic.activityLevel > 8;
 			var h:int = video.height - 10;
 			var ah:int = Math.round(mic.activityLevel * h / 100);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d7fe8012/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/RemoteJob.java
----------------------------------------------------------------------
diff --git a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/RemoteJob.java b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/RemoteJob.java
index cbd2aef..4ffe2f9 100644
--- a/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/RemoteJob.java
+++ b/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screenshare/job/RemoteJob.java
@@ -77,42 +77,62 @@ public class RemoteJob implements Job {
 				String action = "" + obj.get("action");
 				log.trace("Action polled:: {}, count: {}", action, core.getRemoteEvents().size());
 
-				if (action.equals("onmouseup")) {
-					Point p = getCoordinates(obj);
-					robot.mouseMove(p.x, p.y);
-					robot.mouseRelease(InputEvent.BUTTON1_MASK);
-				} else if (action.equals("onmousedown")) {
-					Point p = getCoordinates(obj);
-					robot.mouseMove(p.x, p.y);
-					robot.mousePress(InputEvent.BUTTON1_MASK);
-				} else if (action.equals("mousePos")) {
-					Point p = getCoordinates(obj);
-					robot.mouseMove(p.x, p.y);
-				} else if (action.equals("keyDown")) {
-					new OmKeyEvent(obj).press(this);
-				} else if (action.equals("paste")) {
-					String paste = obj.get("paste").toString();
-					paste(paste);
-				} else if (action.equals("copy")) {
-					String paste = getHighlightedText();
-
-					Map<Integer, String> map = new HashMap<>();
-					map.put(0, "copiedText");
-					map.put(1, paste);
-
-					String clientId = obj.get("clientId").toString();
-
-					core.getInstance().invoke("sendMessageWithClientById", new Object[]{map, clientId}, core);
-				} else if (action.equals("show")) {
-					String paste = getClipboardText();
-
-					Map<Integer, String> map = new HashMap<>();
-					map.put(0, "copiedText");
-					map.put(1, paste);
-
-					String clientId = obj.get("clientId").toString();
-
-					core.getInstance().invoke("sendMessageWithClientById", new Object[]{map, clientId}, core);
+				switch (action) {
+					case "mouseUp":
+					{
+						Point p = getCoordinates(obj);
+						robot.mouseMove(p.x, p.y);
+						robot.mouseRelease(InputEvent.BUTTON1_MASK);
+					}
+						break;
+					case "mouseDown":
+					{
+						Point p = getCoordinates(obj);
+						robot.mouseMove(p.x, p.y);
+						robot.mousePress(InputEvent.BUTTON1_MASK);
+					}
+						break;
+					case "mousePos":
+					{
+						Point p = getCoordinates(obj);
+						robot.mouseMove(p.x, p.y);
+					}
+						break;
+					case "keyDown":
+						new OmKeyEvent(obj).press(this);
+						break;
+					case "paste":
+					{
+						String paste = obj.get("paste").toString();
+						paste(paste);
+					}
+						break;
+					case "copy":
+					{
+						String paste = getHighlightedText();
+
+						Map<Integer, String> map = new HashMap<>();
+						map.put(0, "copiedText");
+						map.put(1, paste);
+
+						String clientId = obj.get("clientId").toString();
+
+						core.getInstance().invoke("sendMessageWithClientById", new Object[]{map, clientId}, core);
+					}
+						break;
+					case "show": //FIXME TODO
+					{
+						String paste = getClipboardText();
+
+						Map<Integer, String> map = new HashMap<>();
+						map.put(0, "copiedText");
+						map.put(1, paste);
+
+						String clientId = obj.get("clientId").toString();
+
+						core.getInstance().invoke("sendMessageWithClientById", new Object[]{map, clientId}, core);
+					}
+						break;
 				}
 			}
 		} catch (Exception err) {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/d7fe8012/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
index 3ac09fc..e07056d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/room.js
@@ -14,9 +14,6 @@ var VideoUtil = (function() {
 			&& c.screenActivities.indexOf('recording') > -1
 			&& c.screenActivities.indexOf('sharing') < 0;
 	}
-	function _isSharing(c) {
-		return 'sharing' === c.type && c.screenActivities.indexOf('sharing') > -1;
-	}
 	function _hasAudio(c) {
 		return c.activities.indexOf('broadcastA') > -1;
 	}
@@ -307,6 +304,7 @@ var Video = (function() {
 		o.cuid = c.cuid;
 		o.userId = c.user.id;
 		o.broadcastId = c.broadcastId;
+		o.type = c.type;
 		delete o.keycode;
 		swf = initVideo(vc, _id + '-swf', o);
 		swf.attr('width', _w).attr('height', _h);