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);