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 dbf9e20  [OPENMEETINGS-1352] stop sharing seems to work
dbf9e20 is described below

commit dbf9e20ab2bee53b2c463de282cf6cbe4716bc88
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Fri Oct 26 22:03:40 2018 +0700

    [OPENMEETINGS-1352] stop sharing seems to work
---
 .../apache/openmeetings/core/remote/KStream.java   | 11 ++++-
 .../openmeetings/core/remote/KurentoHandler.java   | 29 ++++++++++++-
 .../openmeetings/db/entity/basic/Client.java       |  5 +--
 .../org/apache/openmeetings/web/room/raw-sharer.js | 50 +++++++++++++++-------
 .../openmeetings/web/room/raw-video-manager.js     |  4 +-
 .../org/apache/openmeetings/web/room/raw-video.js  |  7 ++-
 6 files changed, 81 insertions(+), 25 deletions(-)

diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
index 5d498e6..1bc11f0 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KStream.java
@@ -40,6 +40,7 @@ import org.apache.openmeetings.db.util.ws.RoomMessage;
 import org.apache.openmeetings.db.util.ws.TextRoomMessage;
 import org.kurento.client.Continuation;
 import org.kurento.client.IceCandidate;
+import org.kurento.client.MediaFlowState;
 import org.kurento.client.MediaProfileSpecType;
 import org.kurento.client.MediaType;
 import org.kurento.client.RecorderEndpoint;
@@ -112,7 +113,15 @@ public class KStream implements IKStream {
                        log.warn("Media stream terminated");
                });
                outgoingMedia.addMediaFlowOutStateChangeListener(evt -> {
-                       log.warn("Media FlowOut :: {}", evt.getState());
+                       if (MediaFlowState.NOT_FLOWING == evt.getState()) {
+                               log.warn("Media FlowOut :: {}", evt.getState());
+                               if (StreamType.SCREEN == sd.getType()) {
+                                       h.stopSharing(sid, uid);
+                               } else {
+                                       //TODO remove stream ?
+                               }
+                               stopBroadcast(h);
+                       }
                });
                outgoingMedia.addMediaFlowInStateChangeListener(evt -> {
                        log.warn("Media FlowIn :: {}", evt);
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 6e0355d..a07ffcb 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
@@ -235,6 +235,7 @@ public class KurentoHandler {
                                return;
                        }
                        KStream sender;
+                       StreamDesc sd;
                        log.debug("Incoming message from user with ID '{}': 
{}", c.getUserId(), msg);
                        switch (cmdId) {
                                case "devicesAltered":
@@ -251,7 +252,7 @@ public class KurentoHandler {
                                        toggleActivity(c, 
Activity.valueOf(msg.getString("activity")));
                                        break;
                                case "broadcastStarted":
-                                       StreamDesc sd = c.getStream(uid);
+                                       sd = c.getStream(uid);
                                        sender = getByUid(uid);
                                        if (sender == null) {
                                                KRoom room = 
getRoom(c.getRoomId());
@@ -281,6 +282,13 @@ public class KurentoHandler {
                                                startSharing(c, msg);
                                        }
                                        break;
+                               case "stopSharing":
+                                       sender = getByUid(uid);
+                                       sd = stopSharing(c.getSid(), uid);
+                                       if (sender != null && sd != null) {
+                                               sender.stopBroadcast(this);
+                                       }
+                                       break;
                        }
                }
        }
@@ -425,7 +433,24 @@ public class KurentoHandler {
        }
 
        private void startSharing(Client c, JSONObject msg) {
-               getRoom(c.getRoomId()).startSharing(this, cm, c, msg);
+               if (c.getRoomId() != null) {
+                       getRoom(c.getRoomId()).startSharing(this, cm, c, msg);
+               }
+       }
+
+       StreamDesc stopSharing(String sid, String uid) {
+               StreamDesc sd = null;
+               Client c = getBySid(sid);
+               if (c.getRoomId() != null) {
+                       sd = c.getStream(uid);
+                       if (sd != null && StreamType.SCREEN == sd.getType()) {
+                               c.removeStream(uid);
+                               cm.update(c);
+                               checkStreams(c.getRoomId());
+                               WebSocketHelper.sendRoom(new 
TextRoomMessage(c.getRoomId(), c, RoomMessage.Type.rightUpdated, c.getUid()));
+                       }
+               }
+               return sd;
        }
 
        public boolean isSharing(Long roomId) {
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
index 720a4f7..4c362b7 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
@@ -218,9 +218,8 @@ public class Client implements IDataProviderEntity, 
IWsClient {
                return sd;
        }
 
-       public Client removeStream(String _uid) {
-               streams.remove(_uid);
-               return this;
+       public StreamDesc removeStream(String _uid) {
+               return streams.remove(_uid);
        }
 
        public List<StreamDesc> getStreams() {
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-sharer.js 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-sharer.js
index c367d58..b902e76 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-sharer.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-sharer.js
@@ -1,7 +1,10 @@
 /* Licensed under the Apache License, Version 2.0 (the "License") 
http://www.apache.org/licenses/LICENSE-2.0 */
+var SHARE_STARTING = 'starting';
+var SHARE_STARTED = 'started';
+var SHARE_STOPED = 'stoped';
 var Sharer = (function() {
        const self = {};
-       let sharer, type, fps, sbtn, rbtn, width, height;
+       let sharer, type, fps, sbtn, rbtn, width, height, shareState = 
SHARE_STOPED;
 
        function _init() {
                sharer = $('#sharer').dialog({
@@ -22,29 +25,46 @@ var Sharer = (function() {
                width = sharer.find('.width');
                height = sharer.find('.height');
                sbtn.click(function() {
-                       _setShareState(true);
-                       VideoManager.sendMessage({
-                               id: 'wannaShare'
-                               , shareType: type.val()
-                               , fps: fps.val()
-                               , width: width.val()
-                               , height: height.val()
-                       });
+                       if (shareState === SHARE_STOPED) {
+                               _setShareState(SHARE_STARTING);
+                               VideoManager.sendMessage({
+                                       id: 'wannaShare'
+                                       , shareType: type.val()
+                                       , fps: fps.val()
+                                       , width: width.val()
+                                       , height: height.val()
+                               });
+                       } else {
+                               const cuid = Room.getOptions().uid
+                                       , v = $('div[data-client-uid="' + cuid 
+ '"][data-client-type="SCREEN"]')
+                                       , uid = v.data().stream().uid;
+                               VideoManager.sendMessage({
+                                       id: 'stopSharing'
+                                       , uid: uid
+                               });
+                               VideoManager.close(uid, false);
+                               _setShareState(SHARE_STOPED);
+                       }
                });
                rbtn = sharer.find('.record-start-stop').button({
                        icon: 'ui-icon-bullet'
                });
        }
        function _setShareState(state) {
-               type.selectmenu('option', 'disabled', state || 
VideoUtil.isEdge());
-               fps.selectmenu('option', 'disabled', state || 
VideoUtil.isEdge());
-               width.prop('disabled', state);
-               height.prop('disabled', state);
-               sbtn.button('option', 'icon', state ? 'ui-icon-stop' : 
'ui-icon-image');
-               if (state) {
+               shareState = state;
+               const dis = SHARE_STOPED !== state;
+               type.selectmenu('option', 'disabled', dis || 
VideoUtil.isEdge());
+               fps.selectmenu('option', 'disabled', dis || VideoUtil.isEdge());
+               width.prop('disabled', dis);
+               height.prop('disabled', dis);
+               sbtn.text(sbtn.data(dis ? 'stop' : 'start'));
+               sbtn.button('option', 'icon', dis ? 'ui-icon-stop' : 
'ui-icon-image');
+               if (state === SHARE_STARTING) {
                        sbtn.button('disable');
+                       rbtn.button('disable');
                } else {
                        sbtn.button('enable');
+                       rbtn.button('enable');
                }
        }
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
index 09663f5..89036c4 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/raw-video-manager.js
@@ -50,7 +50,7 @@ var VideoManager = (function() {
                                                }
                                                break;
                                        case 'broadcastStopped':
-                                               _closeV($('#' + 
VideoUtil.getVid(m.uid)));
+                                               _close(m.uid, false);
                                                break;
                                        case 'broadcast':
                                                _onBroadcast(m);
@@ -168,7 +168,7 @@ var VideoManager = (function() {
                });
        }
        function _close(uid, showShareBtn) {
-               const _id = VideoUtil.getVid(uid), v = $('#' + _id);
+               const v = $('#' + VideoUtil.getVid(uid));
                if (v.length === 1) {
                        _closeV(v);
                }
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 a3fc8eb..a5d83ab 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
@@ -53,7 +53,7 @@ var Video = (function() {
                        navigator.getDisplayMedia(cnts).then(function(stream) {
                                callback(msg, cnts, stream);
                        }).catch(function(err) {
-                               Sharer.setShareState(false);
+                               Sharer.setShareState(SHARE_STOPED);
                                OmUtil.error(err);
                        });
                } else if (b.name === 'Firefox') {
@@ -68,7 +68,7 @@ var Video = (function() {
                        
navigator.mediaDevices.getUserMedia(cnts).then(function(stream) {
                                callback(msg, cnts, stream);
                        }).catch(function(err) {
-                               Sharer.setShareState(false);
+                               Sharer.setShareState(SHARE_STOPED);
                                OmUtil.error(err);
                        });
                } else {
@@ -149,6 +149,9 @@ var Video = (function() {
                                                , uid: sd.uid
                                                , sdpOffer: offerSdp
                                        });
+                                       if (VideoUtil.isSharing(sd)) {
+                                               
Sharer.setShareState(SHARE_STARTED);
+                                       }
                                });
                        });
        }

Reply via email to