From e72ed00a6c8a7043e3accc7058820585052e56fb Mon Sep 17 00:00:00 2001
From: Richard Alam <ritzalam@gmail.com>
Date: Thu, 17 May 2018 12:53:44 -0700
Subject: [PATCH]  - webrtc screenshare should not create another connection to
 red5 screenshare app

---
 .../managers/WebRTCDeskshareManager.as        | 18 +-----
 .../managers/WebRTCPublishWindowManager.as    | 11 +---
 .../managers/WebRTCViewerWindowManager.as     |  8 +--
 .../services/ScreenshareService.as            |  2 +
 .../services/WebRTCDeskshareService.as        | 62 -------------------
 .../screenshare/services/red5/Connection.as   |  1 -
 6 files changed, 9 insertions(+), 93 deletions(-)
 delete mode 100755 bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/WebRTCDeskshareService.as

diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCDeskshareManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCDeskshareManager.as
index c4ee919fa0..510498d5f4 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCDeskshareManager.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCDeskshareManager.as
@@ -18,27 +18,19 @@
 */
 package org.bigbluebutton.modules.screenshare.managers
 {
-	import com.asfusion.mate.actions.builders.serviceClasses.Request;
-	import com.asfusion.mate.events.Dispatcher;
-	
+	import com.asfusion.mate.events.Dispatcher;	
 	import flash.external.ExternalInterface;
-	
-	import org.as3commons.lang.StringUtils;
 	import org.as3commons.logging.api.ILogger;
 	import org.as3commons.logging.api.getClassLogger;
 	import org.bigbluebutton.core.Options;
 	import org.bigbluebutton.core.UsersUtil;
-	import org.bigbluebutton.main.api.JSLog;
 	import org.bigbluebutton.main.events.MadePresenterEvent;
-	import org.bigbluebutton.modules.phone.models.WebRTCAudioStatus;
 	import org.bigbluebutton.modules.screenshare.events.DeskshareToolbarEvent;
 	import org.bigbluebutton.modules.screenshare.events.IsSharingScreenEvent;
 	import org.bigbluebutton.modules.screenshare.events.RequestToStartSharing;
 	import org.bigbluebutton.modules.screenshare.events.ShareStartedEvent;
 	import org.bigbluebutton.modules.screenshare.events.WebRTCViewStreamEvent;
 	import org.bigbluebutton.modules.screenshare.model.ScreenshareOptions;
-	import org.bigbluebutton.modules.screenshare.services.WebRTCDeskshareService;
-	import org.bigbluebutton.modules.screenshare.utils.WebRTCScreenshareUtility;
 
 	public class WebRTCDeskshareManager {
 		private static const LOGGER:ILogger = getClassLogger(WebRTCDeskshareManager);
@@ -47,7 +39,6 @@ package org.bigbluebutton.modules.screenshare.managers
 		private var viewWindowManager:WebRTCViewerWindowManager;
 		private var toolbarButtonManager:ToolbarButtonManager;
 		private var module:ScreenshareModule;
-		private var service:WebRTCDeskshareService;
 		private var globalDispatcher:Dispatcher;
 		private var sharing:Boolean = false;
 		private var usingWebRTC:Boolean = false;
@@ -56,17 +47,15 @@ package org.bigbluebutton.modules.screenshare.managers
 
 		public function WebRTCDeskshareManager() {
 			LOGGER.debug("WebRTCDeskshareManager::WebRTCDeskshareManager");
-			service = new WebRTCDeskshareService();
 			globalDispatcher = new Dispatcher();
-			publishWindowManager = new WebRTCPublishWindowManager(service);
-			viewWindowManager = new WebRTCViewerWindowManager(service);
+			publishWindowManager = new WebRTCPublishWindowManager();
+			viewWindowManager = new WebRTCViewerWindowManager();
 			options = Options.getOptions(ScreenshareOptions) as ScreenshareOptions;
 		}
 
 		public function handleStartModuleEvent(module:ScreenshareModule):void {
 			LOGGER.debug("WebRTC Screenshare Module starting");
 			this.module = module;
-			service.handleStartModuleEvent(module);
 		}
 
 		public function handleStopModuleEvent():void {
@@ -74,7 +63,6 @@ package org.bigbluebutton.modules.screenshare.managers
 
 			publishWindowManager.stopSharing();
 			viewWindowManager.stopViewing();
-			service.disconnect();
 		}
 
 		/*presenter stopped their program stream*/
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCPublishWindowManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCPublishWindowManager.as
index 86e17aeb7f..9580c607bf 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCPublishWindowManager.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCPublishWindowManager.as
@@ -19,17 +19,14 @@
 
 package org.bigbluebutton.modules.screenshare.managers
 {
-	import com.asfusion.mate.events.Dispatcher;
-	
+	import com.asfusion.mate.events.Dispatcher;	
 	import flash.events.TimerEvent;
-	import flash.utils.Timer;
-	
+	import flash.utils.Timer;	
 	import org.as3commons.logging.api.ILogger;
 	import org.as3commons.logging.api.getClassLogger;
 	import org.bigbluebutton.common.IBbbModuleWindow;
 	import org.bigbluebutton.common.events.CloseWindowEvent;
 	import org.bigbluebutton.common.events.OpenWindowEvent;
-	import org.bigbluebutton.modules.screenshare.services.WebRTCDeskshareService;
 	import org.bigbluebutton.modules.screenshare.view.components.WebRTCDesktopPublishWindow;
 
 	public class WebRTCPublishWindowManager {
@@ -37,7 +34,6 @@ package org.bigbluebutton.modules.screenshare.managers
 
 		private var shareWindow:WebRTCDesktopPublishWindow;
 		private var globalDispatcher:Dispatcher;
-		private var service:WebRTCDeskshareService;
 		private var buttonShownOnToolbar:Boolean = false;
 
 		// Timer to auto-publish webcam. We need this timer to delay
@@ -46,10 +42,9 @@ package org.bigbluebutton.modules.screenshare.managers
 		// won't be able to view the webcam.
 		private var autoPublishTimer:Timer;
 
-		public function WebRTCPublishWindowManager(service:WebRTCDeskshareService) {
+		public function WebRTCPublishWindowManager() {
 			LOGGER.debug("PublishWindowManager init");
 			globalDispatcher = new Dispatcher();
-			this.service = service;
 		}
 
 		public function stopSharing():void {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCViewerWindowManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCViewerWindowManager.as
index c4e22c6c58..37e73b854f 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCViewerWindowManager.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCViewerWindowManager.as
@@ -19,27 +19,21 @@
 package org.bigbluebutton.modules.screenshare.managers
 {
 	import com.asfusion.mate.events.Dispatcher;
-	
 	import org.as3commons.logging.api.ILogger;
 	import org.as3commons.logging.api.getClassLogger;
 	import org.bigbluebutton.common.IBbbModuleWindow;
 	import org.bigbluebutton.common.events.CloseWindowEvent;
 	import org.bigbluebutton.common.events.OpenWindowEvent;
-	import org.bigbluebutton.modules.screenshare.services.WebRTCDeskshareService;
-	import org.bigbluebutton.modules.screenshare.view.components.ScreenshareViewWindow;
-	import org.bigbluebutton.modules.screenshare.view.components.WebRTCDesktopPublishWindow;
 	import org.bigbluebutton.modules.screenshare.view.components.WebRTCDesktopViewWindow;
 
 	public class WebRTCViewerWindowManager {
 		private static const LOGGER:ILogger = getClassLogger(ViewerWindowManager);
 
 		private var viewWindow:WebRTCDesktopViewWindow;
-		private var service:WebRTCDeskshareService;
 		private var isViewing:Boolean = false;
 		private var globalDispatcher:Dispatcher;
 
-		public function WebRTCViewerWindowManager(service:WebRTCDeskshareService) {
-			this.service = service;
+		public function WebRTCViewerWindowManager() {
 			globalDispatcher = new Dispatcher();
 		}
 
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/ScreenshareService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/ScreenshareService.as
index 4087f09bf0..95674cead8 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/ScreenshareService.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/ScreenshareService.as
@@ -72,6 +72,8 @@ package org.bigbluebutton.modules.screenshare.services {
         public function checkIfPresenterIsSharingScreen():void {
             LOGGER.debug("check if presenter is sharing screen");
             sender.isScreenSharing(UsersUtil.getInternalMeetingID());
+						// Send a query if webrtc screenshare is being used. (ralam may 17, 2017);
+						sender.queryForScreenshare();
         }
         
         public function requestShareToken():void {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/WebRTCDeskshareService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/WebRTCDeskshareService.as
deleted file mode 100755
index 68eb2385cc..0000000000
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/WebRTCDeskshareService.as
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
-* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
-*
-* Copyright (c) 2015 BigBlueButton Inc. and by respective authors (see below).
-*
-* This program is free software; you can redistribute it and/or modify it under the
-* terms of the GNU Lesser General Public License as published by the Free Software
-* Foundation; either version 3.0 of the License, or (at your option) any later
-* version.
-*
-* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
-* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public License along
-* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
-*
-*/
-package org.bigbluebutton.modules.screenshare.services
-{
-	import com.asfusion.mate.events.Dispatcher;
-	
-	import flash.net.NetConnection;
-	
-	import org.as3commons.logging.api.ILogger;
-	import org.as3commons.logging.api.getClassLogger;
-	import org.bigbluebutton.modules.screenshare.services.red5.Connection;
-
-	public class WebRTCDeskshareService
-	{
-		private static const LOGGER:ILogger = getClassLogger(ScreenshareService);
-
-		private var red5conn:Connection;
-
-		private var module:ScreenshareModule;
-		private var dispatcher:Dispatcher;
-
-		private var sender:MessageSender;
-
-		public function WebRTCDeskshareService() {
-			this.dispatcher = new Dispatcher();
-
-			red5conn = new Connection();
-			sender = new MessageSender(red5conn);
-			sender.queryForScreenshare();
-		}
-
-		public function handleStartModuleEvent(module:ScreenshareModule):void {
-			LOGGER.debug("Deskshare Module starting");
-			this.module = module;
-			red5conn.connect();
-		}
-
-		public function getConnection():Connection{
-			return red5conn;
-		}
-
-		public function disconnect():void{
-			red5conn.disconnect();
-		}
-	}
-}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/Connection.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/Connection.as
index aa17340de9..3f79f9d611 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/Connection.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/Connection.as
@@ -33,7 +33,6 @@ package org.bigbluebutton.modules.screenshare.services.red5 {
     import org.bigbluebutton.core.UsersUtil;
     import org.bigbluebutton.core.managers.ReconnectionManager;
     import org.bigbluebutton.main.events.BBBEvent;
-    import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent;
     import org.bigbluebutton.modules.screenshare.events.ViewStreamEvent;
     import org.bigbluebutton.modules.screenshare.model.ScreenshareModel;
     import org.bigbluebutton.modules.screenshare.model.ScreenshareOptions;
-- 
GitLab