diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala index a48d42117715bca8cd1952c84bf5b4cb6df39d07..554f5c37a215a99cb8225b62efbb046a6e791915 100755 --- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala +++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala @@ -126,8 +126,8 @@ class MeetingActor( var state = new MeetingState2x(inactivityTracker, expiryTracker) /*******************************************************************/ - object FakeTestData extends FakeTestData - FakeTestData.createFakeUsers(liveMeeting) + //object FakeTestData extends FakeTestData + //FakeTestData.createFakeUsers(liveMeeting) /*******************************************************************/ def receive = { diff --git a/bigbluebutton-client/.actionScriptProperties b/bigbluebutton-client/.actionScriptProperties index 06a78d9f4aa04a1da79ae79bc5b858ed7ec2f0cf..3c9a41142ac32c96d1e458ebdc9b4b60d65cabbe 100755 --- a/bigbluebutton-client/.actionScriptProperties +++ b/bigbluebutton-client/.actionScriptProperties @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<actionScriptProperties analytics="false" mainApplicationPath="BigBlueButton.mxml" projectUUID="d0ee1158-6eb2-478c-9e78-b5aa55d7b59c" version="11"> +<actionScriptProperties analytics="false" mainApplicationPath="BigBlueButton.mxml" projectUUID="36eb58ba-e647-4fa5-b3c9-6b5c5395c811" version="11"> <compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin-debug" removeUnusedRSL="true" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" useFlashSDK="false" verifyDigests="true" warn="true"> <compilerSourcePath/> <libraryPath defaultLinkType="0"> diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/GuestWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/GuestWindow.mxml index d70fa50c12a515885e079f87b4a97f21151ca654..c2500aec3de807f6acecf37967ed66fe9591a723 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/GuestWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/GuestWindow.mxml @@ -1,146 +1,146 @@ <?xml version="1.0" encoding="utf-8"?> <!-- - BigBlueButton open source conferencing system - http://www.bigbluebutton.org +BigBlueButton open source conferencing system - http://www.bigbluebutton.org - Copyright (c) 2010 BigBlueButton Inc. and by respective authors (see below). +Copyright (c) 2010 BigBlueButton Inc. and by respective authors (see below). - BigBlueButton 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 2.1 of the License, or (at your option) any later - version. +BigBlueButton 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 2.1 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. +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/>. +You should have received a copy of the GNU Lesser General Public License along +with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. - $Id: $ +$Id: $ --> <mx:TitleWindow xmlns:mx="library://ns.adobe.com/flex/mx" - xmlns:fx="http://ns.adobe.com/mxml/2009" - title="{ResourceUtil.getInstance().getString('bbb.guests.title')}" showCloseButton="false" creationComplete="init()" - x="0" y="0" layout="vertical" width="320" horizontalAlign="center" - xmlns:mate="http://mate.asfusion.com/" > - - <fx:Declarations> - <mate:Listener type="{BBBEvent.ACCEPT_ALL_WAITING_GUESTS}" method="acceptAllWaitingGuests" /> - <mate:Listener type="{BBBEvent.DENY_ALL_WAITING_GUESTS}" method="denyAllWaitingGuests" /> - <mate:Listener type="{RemoveGuestFromViewEvent.REMOVE_GUEST}" receive="{remove(event.userid)}" /> - </fx:Declarations> - - <fx:Script> - <![CDATA[ - import com.asfusion.mate.events.Dispatcher; - - import mx.controls.Button; - import mx.events.CloseEvent; - import mx.managers.PopUpManager; - - import org.bigbluebutton.core.model.LiveMeeting; - import org.bigbluebutton.core.model.users.GuestWaiting; - import org.bigbluebutton.main.events.BBBEvent; - import org.bigbluebutton.main.events.RemoveGuestEvent; - import org.bigbluebutton.main.events.RemoveGuestFromViewEvent; - import org.bigbluebutton.main.events.ResponseModeratorEvent; - import org.bigbluebutton.util.i18n.ResourceUtil; - - private var guestButtons:Object = new Object(); - [Bindable] private var numberOfGuests:Number = 0; - private var dispatcher:Dispatcher = new Dispatcher(); - - public function init():void { - //Uncomment this line to make titlewindow undraggable - //this.isPopUp = false; - } - - public function refreshGuestView():void { - var _guests: Array = LiveMeeting.inst().guestsWaiting.getGuests(); - for (var i:int = 0; i < _guests.length; i++) { - var _guest: GuestWaiting = _guests[i] as GuestWaiting; - if(guestButtons[_guest.intId] == null) { - var guestItem:GuestItem = new GuestItem(); - guestItem.setUser(_guest.name, _guest.intId); - guestListBox.addChild(guestItem); - guestButtons[_guest.intId] = guestItem; - numberOfGuests++; - } - } - this.visible = true; - } - - public function sendResponseToAllGuests(resp:Boolean):void { - removeAllGuests(); - var respCommand:ResponseModeratorEvent = new ResponseModeratorEvent(ResponseModeratorEvent.RESPONSE_ALL); - respCommand.resp = resp; - dispatcher.dispatchEvent(respCommand); - } - - public function sendResponseToAllGuestsCheckBox(resp:Boolean):void { - if(rememberCheckBox.selected) { - var event:BBBEvent = new BBBEvent(BBBEvent.BROADCAST_GUEST_POLICY); - if (resp) { - event.payload['guestPolicy'] = "ALWAYS_ACCEPT"; - } else { - event.payload['guestPolicy'] = "ALWAYS_DENY"; - } - dispatcher.dispatchEvent(event); - } - sendResponseToAllGuests(resp); - } - - public function acceptAllWaitingGuests(event:BBBEvent):void { - sendResponseToAllGuests(true); - } - - public function denyAllWaitingGuests(event:BBBEvent):void { - sendResponseToAllGuests(false); - } - - public function removeAllGuests():void { - var removeGuestEvent:RemoveGuestEvent = new RemoveGuestEvent(RemoveGuestEvent.REMOVE_ALL); - dispatcher.dispatchEvent(removeGuestEvent); - - closeWindow(); - } - - public function remove(userid:String):void { - if (guestButtons[userid] != null) { - numberOfGuests = numberOfGuests - 1; - guestListBox.removeChild(guestButtons[userid]); - delete guestButtons[userid]; - - var removeGuestEvent:RemoveGuestEvent = new RemoveGuestEvent(); - removeGuestEvent.userid = userid; - dispatcher.dispatchEvent(removeGuestEvent); - - if (!hasGuest()) { - closeWindow(); - } - } - } - - public function hasGuest():Boolean { - return numberOfGuests > 0; - } - - public function closeWindow():void { - this.visible = false; - PopUpManager.removePopUp(this); - dispatchEvent(new CloseEvent(CloseEvent.CLOSE)); - } - - ]]> - </fx:Script> - <mx:Label text="{numberOfGuests > 1? ResourceUtil.getInstance().getString('bbb.guests.message.plural', [String(numberOfGuests)]): ResourceUtil.getInstance().getString('bbb.guests.message.singular', [String(numberOfGuests)])}"/> - <mx:HRule width="100%"/> - <mx:Button id="allowEveryoneBtn" label="{ResourceUtil.getInstance().getString('bbb.guests.allowEveryoneBtn.text')}" width="70%" click="sendResponseToAllGuestsCheckBox(true)" toolTip="{allowEveryoneBtn.label}"/> - <mx:Button id="denyEveryoneBtn" label="{ResourceUtil.getInstance().getString('bbb.guests.denyEveryoneBtn.text')}" width="70%" click="sendResponseToAllGuestsCheckBox(false)" toolTip="{denyEveryoneBtn.label}"/> - <mx:CheckBox id="rememberCheckBox" label="{ResourceUtil.getInstance().getString('bbb.guests.rememberAction.text')}"/> - <mx:HRule width="100%"/> - <mx:VBox id="guestListBox" width="100%" height="100%" maxHeight="200" paddingLeft="10" paddingRight="10" paddingBottom="2" /> - + xmlns:fx="http://ns.adobe.com/mxml/2009" + title="{ResourceUtil.getInstance().getString('bbb.guests.title')}" showCloseButton="false" creationComplete="init()" + x="0" y="0" layout="vertical" width="320" horizontalAlign="center" + xmlns:mate="http://mate.asfusion.com/" > + + <fx:Declarations> + <mate:Listener type="{BBBEvent.ACCEPT_ALL_WAITING_GUESTS}" method="acceptAllWaitingGuests" /> + <mate:Listener type="{BBBEvent.DENY_ALL_WAITING_GUESTS}" method="denyAllWaitingGuests" /> + <mate:Listener type="{RemoveGuestFromViewEvent.REMOVE_GUEST}" receive="{remove(event.userid)}" /> + </fx:Declarations> + + <fx:Script> + <![CDATA[ + import com.asfusion.mate.events.Dispatcher; + + import mx.controls.Button; + import mx.events.CloseEvent; + import mx.managers.PopUpManager; + + import org.bigbluebutton.core.model.LiveMeeting; + import org.bigbluebutton.core.model.users.GuestWaiting; + import org.bigbluebutton.main.events.BBBEvent; + import org.bigbluebutton.main.events.RemoveGuestEvent; + import org.bigbluebutton.main.events.RemoveGuestFromViewEvent; + import org.bigbluebutton.main.events.ResponseModeratorEvent; + import org.bigbluebutton.util.i18n.ResourceUtil; + + private var guestButtons:Object = new Object(); + [Bindable] private var numberOfGuests:Number = 0; + private var dispatcher:Dispatcher = new Dispatcher(); + + public function init():void { + //Uncomment this line to make titlewindow undraggable + //this.isPopUp = false; + } + + public function refreshGuestView():void { + var _guests: Array = LiveMeeting.inst().guestsWaiting.getGuests(); + for (var i:int = 0; i < _guests.length; i++) { + var _guest: GuestWaiting = _guests[i] as GuestWaiting; + if(guestButtons[_guest.intId] == null) { + var guestItem:GuestItem = new GuestItem(); + guestItem.setUser(_guest.name, _guest.intId); + guestListBox.addChild(guestItem); + guestButtons[_guest.intId] = guestItem; + numberOfGuests++; + } + } + this.visible = true; + } + + public function sendResponseToAllGuests(resp:Boolean):void { + removeAllGuests(); + var respCommand:ResponseModeratorEvent = new ResponseModeratorEvent(ResponseModeratorEvent.RESPONSE_ALL); + respCommand.resp = resp; + dispatcher.dispatchEvent(respCommand); + } + + public function sendResponseToAllGuestsCheckBox(resp:Boolean):void { + if(rememberCheckBox.selected) { + var event:BBBEvent = new BBBEvent(BBBEvent.BROADCAST_GUEST_POLICY); + if (resp) { + event.payload['guestPolicy'] = "ALWAYS_ACCEPT"; + } else { + event.payload['guestPolicy'] = "ALWAYS_DENY"; + } + dispatcher.dispatchEvent(event); + } + sendResponseToAllGuests(resp); + } + + public function acceptAllWaitingGuests(event:BBBEvent):void { + sendResponseToAllGuests(true); + } + + public function denyAllWaitingGuests(event:BBBEvent):void { + sendResponseToAllGuests(false); + } + + public function removeAllGuests():void { + var removeGuestEvent:RemoveGuestEvent = new RemoveGuestEvent(RemoveGuestEvent.REMOVE_ALL); + dispatcher.dispatchEvent(removeGuestEvent); + + closeWindow(); + } + + public function remove(userid:String):void { + if (guestButtons[userid] != null) { + numberOfGuests = numberOfGuests - 1; + guestListBox.removeChild(guestButtons[userid]); + delete guestButtons[userid]; + + var removeGuestEvent:RemoveGuestEvent = new RemoveGuestEvent(); + removeGuestEvent.userid = userid; + dispatcher.dispatchEvent(removeGuestEvent); + + if (!hasGuest()) { + closeWindow(); + } + } + } + + public function hasGuest():Boolean { + return numberOfGuests > 0; + } + + public function closeWindow():void { + this.visible = false; + PopUpManager.removePopUp(this); + //dispatchEvent(new CloseEvent(CloseEvent.CLOSE)); + } + + ]]> + </fx:Script> + <mx:Label text="{numberOfGuests > 1? ResourceUtil.getInstance().getString('bbb.guests.message.plural', [String(numberOfGuests)]): ResourceUtil.getInstance().getString('bbb.guests.message.singular', [String(numberOfGuests)])}"/> + <mx:HRule width="100%"/> + <mx:Button id="allowEveryoneBtn" label="{ResourceUtil.getInstance().getString('bbb.guests.allowEveryoneBtn.text')}" width="70%" click="sendResponseToAllGuestsCheckBox(true)" toolTip="{allowEveryoneBtn.label}"/> + <mx:Button id="denyEveryoneBtn" label="{ResourceUtil.getInstance().getString('bbb.guests.denyEveryoneBtn.text')}" width="70%" click="sendResponseToAllGuestsCheckBox(false)" toolTip="{denyEveryoneBtn.label}"/> + <mx:CheckBox id="rememberCheckBox" label="{ResourceUtil.getInstance().getString('bbb.guests.rememberAction.text')}"/> + <mx:HRule width="100%"/> + <mx:VBox id="guestListBox" width="100%" height="100%" maxHeight="200" paddingLeft="10" paddingRight="10" paddingBottom="2" /> + </mx:TitleWindow> diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/maps/UsersMainEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/maps/UsersMainEventMap.mxml index 0a3882a8e6951b30bb7a6b0ae2782c9b287462c9..2a67382431576c3e78d11a26678054975b9037b5 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/maps/UsersMainEventMap.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/maps/UsersMainEventMap.mxml @@ -194,7 +194,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. </EventHandlers> <EventHandlers type="{ResponseModeratorEvent.RESPONSE_ALL}" > - <MethodInvoker generator="{UserService}" method="responseToGuest" arguments="{event}" /> + <MethodInvoker generator="{UserService}" method="responseToAllGuest" arguments="{event}" /> </EventHandlers> <EventHandlers type="{BBBEvent.BROADCAST_GUEST_POLICY}" > diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as index 16ca44e43071663ad47d24befd8b19b30ffde9a8..c738e59f43fa47a6d3cd68b5219c3fc3be54c161 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as @@ -37,6 +37,8 @@ package org.bigbluebutton.modules.users.services import org.bigbluebutton.core.connection.messages.breakoutrooms.RequestBreakoutJoinURLMsg; import org.bigbluebutton.core.connection.messages.breakoutrooms.RequestBreakoutJoinURLMsgBody; import org.bigbluebutton.core.managers.ConnectionManager; + import org.bigbluebutton.core.model.LiveMeeting; + import org.bigbluebutton.core.model.users.GuestWaiting; public class MessageSender { private static const LOGGER:ILogger = getClassLogger(MessageSender); @@ -625,12 +627,17 @@ package org.bigbluebutton.modules.users.services public function responseToGuest(userId:String, response:Boolean):void { LOGGER.debug("responseToGuest - userId:[" + userId + "] response:[" + response + "]"); - var message:Object = new Object(); - message["userId"] = userId; - message["response"] = response; + var _guests: Array = new Array(); + _guests.push({guest: userId, approved: response}); + + var message:Object = { + header: {name: "GuestsWaitingApprovedMsg", meetingId: UsersUtil.getInternalMeetingID(), + userId: UsersUtil.getMyUserID()}, + body: {guests: _guests, approvedBy: UsersUtil.getMyUserID()} + }; var _nc:ConnectionManager = BBB.initConnectionManager(); - _nc.sendMessage("participants.responseToGuest", + _nc.sendMessage2x( function(result:String):void { // On successful result LOGGER.debug(result); }, @@ -640,12 +647,38 @@ package org.bigbluebutton.modules.users.services logData.message = "Error occured response guest."; LOGGER.info(JSON.stringify(logData)); }, - message + JSON.stringify(message) ); } public function responseToAllGuests(response:Boolean):void { - responseToGuest(null, response); + var _guestsWaiting: Array = LiveMeeting.inst().guestsWaiting.getGuests(); + var _guests: Array = new Array(); + + for (var i:int = 0; i < _guests.length; i++) { + var _guest: GuestWaiting = _guestsWaiting[i] as GuestWaiting; + _guests.push({guest: _guest.intId, approved: response}); + } + + var message:Object = { + header: {name: "GuestsWaitingApprovedMsg", meetingId: UsersUtil.getInternalMeetingID(), + userId: UsersUtil.getMyUserID()}, + body: {guests: _guests, approvedBy: UsersUtil.getMyUserID()} + }; + + var _nc:ConnectionManager = BBB.initConnectionManager(); + _nc.sendMessage2x( + function(result:String):void { // On successful result + LOGGER.debug(result); + }, + function(status:String):void { // status - On error occurred + var logData:Object = UsersUtil.initLogData(); + logData.tags = ["apps"]; + logData.message = "Error occured response guest."; + LOGGER.info(JSON.stringify(logData)); + }, + JSON.stringify(message) + ); } } } diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindowEventHandler.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindowEventHandler.as index 48bbcf076d1c07f224dd8f576144ebbe9b4211cf..2b758c46e280f40618cc276ec1d3c2d5ae450fdf 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindowEventHandler.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindowEventHandler.as @@ -86,15 +86,10 @@ package org.bigbluebutton.modules.users.views users.refresh(); } - private function getWebcamStreamsForUser(userId: String): String { + private function getWebcamStreamsForUser(userId: String): Array { var streamIds: Array = LiveMeeting.inst().webcams.getStreamIdsForUser(userId); - var streams:String = ""; - for each(var stream:String in streamIds) { - streams = streams + stream + "|"; - } - //Remove last | - streams = streams.slice(0, streams.length-1); - return streams; + + return streamIds; } private function addUser(users: ArrayCollection, user: User2x):void { diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/model/BBBUser2x.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/model/BBBUser2x.as index d3de4cd74327a90fe4e405f6632b02163114d1ce..a6884a534f36f121961cbfc1a5e38c2ea26ec3bc 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/model/BBBUser2x.as +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/model/BBBUser2x.as @@ -48,7 +48,7 @@ package org.bigbluebutton.modules.users.views.model [Bindable] public function get hasStream():Boolean { - return streamNames.length > 0; + return _streamNames.length > 0; } public function set hasStream(s:Boolean):void { throw new Error("hasStream cannot be set. It is derived directly from streamName"); @@ -83,15 +83,15 @@ package org.bigbluebutton.modules.users.views.model return _viewingStream.some(function(item:*, index:int, array:Array):Boolean { return item == streamName; }); } public function isViewingAllStreams():Boolean { - return _viewingStream.length == streamNames.length; + return _viewingStream.length == _streamNames.length; } - [Bindable] public var streamNames:Array = new Array(); + private var _streamNames:Array = new Array(); [Bindable] - public function get streamName():String { + public function get streams():Array { var streams:String = ""; - for each(var stream:String in streamNames) { + for each(var stream:String in _streamNames) { streams = streams + stream + "|"; } //Remove last | @@ -100,14 +100,17 @@ package org.bigbluebutton.modules.users.views.model } private function hasThisStream(streamName:String):Boolean { - return streamNames.some(function(item:*, index:int, array:Array):Boolean { return item == streamName; }); + for each(var streamId:String in _streamNames) { + if (streamId == streamName) return true; + } + return false; } - public function set streamName(streamNames:String):void { - if(streamNames) { - var streamNamesList:Array = streamNames.split("|"); - for each(var streamName:String in streamNamesList) { - sharedWebcam(streamName); + public function set streams(streamIds:Array):void { + if (streamIds != null) { + _streamNames = streamIds; + for each(var streamId:String in _streamNames) { + sharedWebcam(streamId); } } }