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 1b7c2b2  [OPENMEETINGS-2023] initial working version
1b7c2b2 is described below

commit 1b7c2b2b9691968535a22204d3fc0e471a2fa4aa
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Mon Mar 4 22:50:00 2019 +0700

    [OPENMEETINGS-2023] initial working version
---
 .../openmeetings/core/remote/StreamProcessor.java  | 41 +++++++++++++++++-----
 .../apache/openmeetings/web/room/RoomPanel.java    | 11 ++++--
 2 files changed, 41 insertions(+), 11 deletions(-)

diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
index abb4bef..6314592 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/StreamProcessor.java
@@ -216,19 +216,44 @@ public class StreamProcessor implements IStreamProcessor {
                                                .put("stream", sd.toJson())
                                                .put(PARAM_ICE, 
kHandler.getTurnServers(false)));
                        } else {
-                               //constraints were changed
-                               c.getStreams().stream()
-                                       .filter(sd -> StreamType.WEBCAM == 
sd.getType())
-                                       .findFirst()
-                                       .ifPresent(sd -> {
-                                               sd.setActivities();
-                                               cm.update(c);
-                                       });
+                               constraintsChanged(c);
                                WebSocketHelper.sendRoom(new 
TextRoomMessage(c.getRoomId(), c, RoomMessage.Type.rightUpdated, c.getUid()));
                        }
                }
        }
 
+       private void constraintsChanged(Client c) {
+               //constraints were changed
+               c.getStreams().stream()
+                       .filter(sd -> StreamType.WEBCAM == sd.getType())
+                       .findFirst()
+                       .ifPresent(sd -> {
+                               sd.setActivities();
+                               cm.update(c);
+                       });
+       }
+
+       public void rightsUpdated(Client c) {
+               Optional<StreamDesc> osd = c.getScreenStream();
+               if (osd.isPresent() && !hasRightsToShare(c)) {
+                       stopSharing(c, osd.get().getUid());
+               }
+               if (isBroadcasting(c)) {
+                       constraintsChanged(c);
+               } else {
+                       c.getStreams().stream()
+                               .filter(sd -> StreamType.WEBCAM == sd.getType())
+                               .forEach(sd -> {
+                                       KStream stream = 
streamByUid.get(sd.getUid());
+                                       if (stream != null) {
+                                               KRoom room = 
kHandler.getRoom(c.getRoomId());
+                                               room.onStopBroadcast(stream, 
this);
+                                       }
+                               });
+               }
+               WebSocketHelper.sendRoom(new TextRoomMessage(c.getRoomId(), c, 
RoomMessage.Type.rightUpdated, c.getUid()));
+       }
+
        private void checkStreams(Long roomId) {
                if (!kHandler.isConnected()) {
                        return;
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index e267abd..7c1851e 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -666,7 +666,7 @@ public class RoomPanel extends BasePanel {
                                return;
                        } else {
                                // we found no-one we can ask, allow right
-                               broadcast(cm.update(getClient().allow(right)));
+                               
rightsUpdated(cm.update(getClient().allow(right)));
                        }
                }
                // ask
@@ -704,7 +704,7 @@ public class RoomPanel extends BasePanel {
        }
 
        public void allowRight(Client client, Right... rights) {
-               broadcast(client.allow(rights));
+               rightsUpdated(client.allow(rights));
        }
 
        public void denyRight(Client client, Right... rights) {
@@ -717,7 +717,12 @@ public class RoomPanel extends BasePanel {
                if (client.hasActivity(Client.Activity.VIDEO) && 
!client.hasRight(Right.video)) {
                        client.remove(Client.Activity.VIDEO);
                }
-               broadcast(client);
+               rightsUpdated(client);
+       }
+
+       public void rightsUpdated(Client c) {
+               cm.update(c);
+               streamProcessor.rightsUpdated(c);
        }
 
        public void broadcast(Client client) {

Reply via email to