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 460cc32 [OPENMEETINGS-1955] more work on share/record switching 460cc32 is described below commit 460cc32980459913bacf8be668f1303c275e0a3a Author: Maxim Solodovnik <solomax...@gmail.com> AuthorDate: Wed Feb 20 00:05:03 2019 +0700 [OPENMEETINGS-1955] more work on share/record switching --- .../org/apache/openmeetings/core/remote/KRoom.java | 7 +++++ .../openmeetings/core/remote/KurentoHandler.java | 34 ++++++++++++++++++---- .../org/apache/openmeetings/web/room/raw-video.js | 1 + 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java index 548d690..8f5f7dd 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java @@ -65,6 +65,7 @@ public class KRoom { private Long recordingId = null; private final RecordingChunkDao chunkDao; private JSONObject recordingUser = new JSONObject(); + private JSONObject sharingUser = new JSONObject(); public KRoom(Room r, MediaPipeline pipeline, RecordingChunkDao chunkDao) { this.roomId = r.getId(); @@ -213,9 +214,14 @@ public class KRoom { return sharingStarted.get(); } + public JSONObject getSharingUser() { + return new JSONObject(sharingUser.toString()); + } + public void startSharing(KurentoHandler h, IClientManager cm, Client c, Optional<StreamDesc> osd, JSONObject msg, Activity a) { StreamDesc sd = null; if (sharingStarted.compareAndSet(false, true)) { + sharingUser.put("sid", c.getSid()); sd = c.addStream(StreamType.SCREEN, a); sd.setWidth(msg.getInt("width")).setHeight(msg.getInt("height")); cm.update(c); @@ -236,6 +242,7 @@ public class KRoom { public void stopSharing() { if (sharingStarted.compareAndSet(true, false)) { + sharingUser = new JSONObject(); } } 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 8af9a06..afbf733 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 @@ -294,15 +294,14 @@ public class KurentoHandler { } break; case "stopSharing": - sender = getByUid(uid); - sd = stopSharing(c.getSid(), uid); - if (sender != null && sd != null) { - sender.stopBroadcast(this); - } + stopSharing(c, uid); break; case "stopRecord": stopRecording(c); break; + case "errorSharing": + errorSharing(c); + break; } } @@ -485,12 +484,37 @@ public class KurentoHandler { return hasRightsToShare(c) && !isSharing(r.getId()); } + private void errorSharing(Client c) { + if (!isConnected()) { + return; + } + KRoom room = getRoom(c.getRoomId()); + if (!room.isSharing() || !c.getSid().equals(room.getSharingUser().getString("sid"))) { + return; + } + Optional<StreamDesc> osd = c.getScreenStream(); + if (osd.isPresent()) { + stopSharing(c, osd.get().getUid()); + } else { + room.stopSharing(); + } + stopRecording(c); + } + private void startSharing(Client c, Optional<StreamDesc> osd, JSONObject msg, Activity a) { if (isConnected() && c.getRoomId() != null) { getRoom(c.getRoomId()).startSharing(this, cm, c, osd, msg, a); } } + private void stopSharing(Client c, String uid) { + KStream sender = getByUid(uid); + StreamDesc sd = stopSharing(c.getSid(), uid); + if (sender != null && sd != null) { + sender.stopBroadcast(this); + } + } + StreamDesc stopSharing(String sid, String uid) { StreamDesc sd = null; Client c = getBySid(sid); diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js index f85e92f..d115d8b 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video.js @@ -41,6 +41,7 @@ var Video = (function() { } function _getScreenStream(msg, callback) { function __handleScreenError(err) { + VideoManager.sendMessage({id: 'errorSharing'}); Sharer.setShareState(SHARE_STOPED); Sharer.setRecState(SHARE_STOPED); OmUtil.error(err);