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

Reply via email to