<?xml version="1.0" encoding="UTF-8" ?> | |
<!-- | |
Licensed to the Apache Software Foundation (ASF) under one | |
or more contributor license agreements. See the NOTICE file | |
distributed with this work for additional information | |
regarding copyright ownership. The ASF licenses this file | |
to you under the Apache License, Version 2.0 (the | |
"License"); you may not use this file except in compliance | |
with the License. You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, | |
software distributed under the License is distributed on an | |
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
KIND, either express or implied. See the License for the | |
specific language governing permissions and limitations | |
under the License. | |
--> | |
<library> | |
<class name="commonVideoViewContentSWF10" extends="view"> | |
<switch> | |
<when property="$as3"> | |
<passthrough> | |
import flash.net.LocalConnection; | |
import flash.external.ExternalInterface; | |
</passthrough> | |
</when> | |
</switch> | |
<attribute name="offsetLength" type="number" value="40"/> | |
<attribute name="videoWidth" type="number" value="132"/> | |
<attribute name="videoHeight" type="number" value="132"/> | |
<attribute name="SIDEPANEL_WIDTH" type="number" value="270" /> | |
<handler name="oninit"> | |
<![CDATA[ | |
var client = {}; | |
client.t = this; | |
client.toggleVideo = this.toggleVideo; | |
client.createEditRecordStream = this.createEditRecordStream; | |
client.createVideoObject = this.createVideoObject; | |
client.createVideo = this.createVideo; | |
client.batchCreateVideo = this.batchCreateVideo; | |
client.getVideoObjectByPublicSID = this.getVideoObjectByPublicSID; | |
client.getVideoObjectFreePos = this.getVideoObjectFreePos; | |
client.getVideoObjectCount = this.getVideoObjectCount; | |
client.disconnectclient = this.disconnectclient; | |
client.resetAllValues = this.resetAllValues; | |
client.closeStreamClient = this.closeStreamClient; | |
client.setSpeakingByPos = this.setSpeakingByPos; | |
client.setAVSettingsToClient = this.setAVSettingsToClient; | |
client.startStream = this.startStream; | |
client.removeVideoByUser = this.removeVideoByUser; | |
client.muteSound = this.muteSound; | |
client.updateMuteStatusVideoView = this.updateMuteStatusVideoView; | |
client.ismoderatorChanged = this.ismoderatorChanged; | |
// update rights to SWF10 client | |
client.updateModerationFlag = this.updateModerationFlag; | |
client.changeDevice = this.changeDevice; | |
client.setDrawAllowStatus = this.setDrawAllowStatus; | |
client.setExclusiveAudioAllowStatus = this.setExclusiveAudioAllowStatus; | |
client.exitRoom = this.exitRoom; | |
client.immediateExitRoom = this.immediateExitRoom; | |
client.closeWhiteboard = this.closeWhiteboard; | |
client.arrangeWindows = this.arrangeWindows; | |
client.updateFirstLastName = this.updateFirstLastName; | |
client.setSessionId = this.setSessionId; | |
var lc:LocalConnection = new LocalConnection(); | |
lc.connect(canvas.vid_lc_name); | |
lc.client = client; | |
canvas.setAttribute("lc", lc); | |
]]> | |
</handler> | |
<method name="toggleVideo" args="value"> | |
if($debug) Debug.info("toggleVideo ", value); | |
canvas.userobject.canVideo = value; | |
</method> | |
<method name="createEditRecordStream" args="syncUpdate,isInterview,interviewPodId"> | |
if($debug) Debug.info("createEditRecordStream,", syncUpdate, isInterview, interviewPodId, canvas.userobject); | |
if (canvas.inner.editRecordStream != null) | |
canvas.inner.editRecordStream.destroy(); | |
new lz.editRecordStreamSWF10(canvas.inner, { | |
name:"editRecordStream", | |
isSyncUpdate:syncUpdate, | |
isInterview:isInterview, | |
interviewPodId:interviewPodId | |
}); | |
return; | |
</method> | |
<method name="batchCreateVideo" args="selfStreamId, clients"> | |
<![CDATA[ | |
if ($debug) Debug.info("batchCreateVideo: ", selfStreamId, clients.length); | |
for (var i = 0; i < clients.length; ++i) { | |
var c = clients[i]; | |
if (c.streamid != selfStreamId) { | |
if (c.isBroadcasting) { | |
createVideo(c.publicSID, c.firstname + ' ' + c.lastname, c.broadCastID, c.avsettings, -1, c); | |
} else { | |
createVideoObject(c.publicSID, false, -1, c); | |
} | |
} | |
} | |
]]> | |
</method> | |
<!-- | |
Method that creates the video views when another user enters a room and his | |
item in the list of participants is created. | |
The method to "play" the stream is invoked later, when the user | |
really starts to stream and not only when he just enters the room. | |
--> | |
<method name="createVideoObject" args="publicSID,isBroadcasting,interviewPodId,object"> | |
if($debug) Debug.info("createVideoObject, publicSID: ",publicSID, "isBroadcasting: ", isBroadcasting, "object", object); | |
var vidContainer = getVideoObjectByPublicSID(publicSID); | |
if(vidContainer == null) { | |
vidContainer = isBroadcasting ? this.getNewVideoObject(publicSID) : this.getNewVideoObjectByPos(publicSID); | |
vidContainer.publicSID = publicSID; | |
} | |
if ($debug) Debug.write("Is interview ? ",canvas.isInterview); | |
if (canvas.isInterview) { | |
if ($debug) Debug.write("Is interview ",interviewPodId,"x",canvas["interviewPod"+interviewPodId+"_x"]); | |
if (interviewPodId != null) { | |
vidContainer.setAttribute("interviewPodId", interviewPodId); | |
vidContainer.setAttribute("x",canvas["interviewPod"+interviewPodId+"_x"]); | |
vidContainer.setAttribute("y",canvas["interviewPod"+interviewPodId+"_y"]); | |
} | |
vidContainer.setAttribute("width",322); | |
vidContainer.setAttribute("height",281); | |
} | |
vidContainer.clientVars = object; | |
vidContainer.setAttribute('visibility','hidden'); | |
return vidContainer; | |
</method> | |
<!-- | |
Method that creates the video views when user(self) initially entering a room. | |
Creates the video-view AND starts to stream/play the video | |
--> | |
<method name="createVideo" args="publicSID,displayName,broadcastId,avsettings,interviewPodId,object"> | |
<![CDATA[ | |
if ($debug) Debug.info("createVideo, publicSID: ",publicSID,"broadcastId: ",broadcastId,"AVsettings: ",avsettings); | |
if ($debug) Debug.write(" createVideo ALL vars ",object); | |
var vidContainer = getVideoObjectByPublicSID(publicSID); | |
if(vidContainer == null) { | |
vidContainer = this.getNewVideoObjectByPos(publicSID); | |
vidContainer.clientVars = object; | |
vidContainer.setAttribute('chatpartnername',displayName); | |
if (avsettings=="n"){ | |
vidContainer.setVideouserProfilePic(object); | |
vidContainer.setAttribute("visibility","hidden"); | |
} else if (avsettings=="a"){ | |
vidContainer.setVideouserProfilePic(object); | |
if ($debug) Debug.warn("start play"); | |
vidContainer._chatvideoinner._videostream.playStream(broadcastId,-1); | |
vidContainer.setAttribute("visible", false); | |
} else if (avsettings=="v" || avsettings=="av") { | |
//this means avsettings is either: "v" or "av" | |
vidContainer.setDefaultVideoSize(object.VWidth,object.VHeight); | |
vidContainer._chatvideoinner._videostream.playStream(broadcastId,-1); | |
vidContainer.setAttribute("visibility","visible"); | |
} else { | |
//this means user did not select anything yet and streaming has not started | |
vidContainer.setAttribute("visibility","hidden"); | |
} | |
vidContainer.setAttribute("interviewPodId", interviewPodId); | |
vidContainer.updateAVSettingsSymbol(object); | |
if (object.micMuted) { | |
vidContainer.setMicMuted(object.micMuted); | |
} | |
} | |
if ($debug) Debug.write("Is interview ? ",canvas.isInterview); | |
if (canvas.isInterview && interviewPodId != null && interviewPodId > 0) { | |
if ($debug) Debug.write("Is interview ",interviewPodId,"x",canvas["interviewPod"+interviewPodId+"_x"]); | |
vidContainer.setAttribute("interviewPodId", interviewPodId); | |
vidContainer.setAttribute("x",canvas["interviewPod"+interviewPodId+"_x"]); | |
vidContainer.setAttribute("y",canvas["interviewPod"+interviewPodId+"_y"]); | |
vidContainer.setAttribute("width",322); | |
vidContainer.setAttribute("height",281); | |
} | |
return; | |
]]> | |
</method> | |
<method name="getVideoObjectByPublicSID" args="publicSID"> | |
<![CDATA[ | |
//if ($debug) Debug.write("getVideoObjectByPublicSid SEARCH: ",publicSID); | |
for (var i=0;i<this.subviews.length;i++){ | |
//if ($debug) Debug.write("this.subviews[i].publicSID ",this.subviews[i].publicSID); | |
if (this.subviews[i].publicSID==publicSID){ | |
return this.subviews[i]; | |
} | |
} | |
if ($debug) Debug.warn(" - getVideoObjectByPublicSID - DID NOT FIND THE USER BY ",publicSID); | |
return null; | |
]]> | |
</method> | |
<method name="getNewVideoObjectByPos" args="publicSID"> | |
<![CDATA[ | |
//Get a Free VideoView Slot | |
var freePos = this.getVideoObjectFreePos(this.offsetLength,this.videoWidth,this.videoHeight); | |
return new lz.videoObjectPlayBroadcast(this,{ | |
publicSID:publicSID, | |
width:videoWidth, | |
height:videoHeight, | |
x:freePos[0], | |
y:freePos[1], | |
isInterview:canvas.isInterview | |
}); | |
]]> | |
</method> | |
<method name="getNewVideoObject" args="publicSID"> | |
<![CDATA[ | |
this.broadCastViewRef = getNewVideoObjectByPos(publicSID); | |
this.broadCastViewRef._chatvideoinner.r.destroy(); | |
if ($debug) Debug.write("getNewVideoObject canvas.userobject ",publicSID,canvas.userobject); | |
this.broadCastViewRef.setAttribute('chatpartnername',canvas.userobject.firstname+' '+canvas.userobject.lastname); | |
return this.broadCastViewRef; | |
]]> | |
</method> | |
<method name="getVideoObjectByInterviewPodId" args="interviewPodId"> | |
<![CDATA[ | |
for (var i=0;i<this.subviews.length;i++){ | |
if (this.subviews[i].interviewPodId==interviewPodId){ | |
return this.subviews[i]; | |
} | |
} | |
if ($debug) Debug.warn(" - getVideoObjectByInterviewPodId - DID NOT FIND THE USER BY ",interviewPodId); | |
return null; | |
]]> | |
</method> | |
<method name="getVideoObjectCount" args="a"> | |
<![CDATA[ | |
var count = 0; | |
for (var i = 0; i < this.subviews.length; ++i) { | |
if (this.subviews[i].visible) { | |
count++; | |
} | |
} | |
//if ($debug) Debug.debug("COUNT :: ", count); | |
canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'onInterviewPodCount', count); | |
]]> | |
</method> | |
<method name="getVideoObjectFreePos" args="offsetLength,videoWidth,videoHeight"> | |
<![CDATA[ | |
var newx = 20; | |
if (canvas.currentRoomObject.hideWhiteboard) { | |
newx += SIDEPANEL_WIDTH; | |
} | |
var newy = 0; | |
var posFound = false; | |
if (offsetLength == undefined) { | |
offsetLength=10; | |
} | |
while (!posFound) { | |
posFound = true; | |
for (var i=0;i<this.subviews.length;i++){ | |
var subview = this.subviews[i]; | |
var left = subview.x; | |
var right = subview.x + subview.width; | |
var top = subview.y; | |
var bottom = subview.y + subview.height; | |
if( !(newx > right | |
|| (newx + videoWidth) < left | |
|| newy > bottom | |
|| (newy + videoHeight) < top )) | |
{ | |
newx = right + offsetLength; | |
posFound = false; | |
} | |
if ((newx + videoWidth) >= canvas.width) { | |
newx = 20; | |
if (canvas.currentRoomObject.hideWhiteboard) { | |
newx += SIDEPANEL_WIDTH; | |
} | |
newy += 10; | |
posFound = false; | |
} | |
} | |
} | |
if ((newy + videoHeight) >= canvas.height) { | |
newy = 0; | |
} | |
var result = [newx, newy]; | |
return result; | |
]]> | |
</method> | |
<method name="disconnectclient" args="publicSID"> | |
<![CDATA[ | |
if ($debug) Debug.write("disconnectclient: ", publicSID); | |
var obj = closeStreamclient(publicSID); | |
if (obj == null) { | |
if ($debug) Debug.warn("Could Not find this To disconnect",publicSID); | |
} else { | |
obj.destroy(); | |
} | |
]]> | |
</method> | |
<method name="muteSound" args="publicSID, bool"> | |
<![CDATA[ | |
var obj = this.getVideoObjectByPublicSID(publicSID); | |
if (obj != null) { | |
obj.silenceMicrophone(bool); | |
} | |
return; | |
]]> | |
</method> | |
<method name="resetAllValues"> | |
for (var eg in this.subviews){ | |
this.subviews[eg].resetValues(); | |
} | |
return; | |
</method> | |
<method name="closeStreamclient" args="publicSID"> | |
<![CDATA[ | |
if ($debug) Debug.write("closeStreamthis: ", publicSID); | |
var obj = this.getVideoObjectByPublicSID(publicSID); | |
if ($debug) Debug.write("closeStreamthis obj: ", obj); | |
if (obj != null) { | |
obj.resetValues(); | |
} | |
if (canvas.publicSID == publicSID && canvas.inner.editRecordStream != null) { | |
canvas.inner.editRecordStream.cleanVideos(); | |
canvas.inner.editRecordStream.destroy(); | |
canvas.inner.editRecordStream = null; | |
} | |
return obj; | |
]]> | |
</method> | |
<method name="removeVideoByUser" args="publicSID"><![CDATA[ | |
var obj = this.closeStreamclient(publicSID); | |
if(obj != null) { | |
obj.destroy(); | |
} | |
return; | |
]]></method> | |
<method name="updateMuteStatusVideoView" args="roomClient"> | |
<![CDATA[ | |
var obj = this.getVideoObjectByPublicSID(roomClient.publicSID); | |
if (obj != null) { | |
obj.muteMicrophone(roomClient); | |
} | |
]]> | |
</method> | |
<method name="ismoderatorChanged" args="m"> | |
canvas.setAttribute("ismoderator", m); | |
return; | |
</method> | |
<method name="setSpeakingByPos" args="publicSID,bool"> | |
<![CDATA[ | |
//if ($debug) Debug.write("setSpeakingByPos ",publicSID,bool); | |
var obj = this.getVideoObjectByPublicSID(publicSID); | |
if (obj == null) { | |
if ($debug) Debug.warn("Could not find user for setSpeakingByPos ",publicSID,bool); | |
return; | |
} | |
obj._loudness.setSpeaking(bool); | |
]]> | |
</method> | |
<method name="setAVSettingsToClient" args="rcl"> | |
<![CDATA[ | |
if ($debug) Debug.write("setAVSettingsToClient: ", rcl.publicSID, rcl); | |
var obj = this.getVideoObjectByPublicSID(rcl.publicSID); | |
if ($debug) Debug.write("setAVSettingsToClient: ", obj, rcl.avsettings); | |
if (obj == null) { | |
obj = this.getNewVideoObjectByPos(rcl.publicSID); | |
} | |
if ("n" == rcl.avsettings){ | |
obj.setVideouserProfilePic(rcl); | |
} else if ("a" == rcl.avsettings){ | |
obj.setVideouserProfilePic(rcl); | |
} else { | |
obj.deleteVideoConfProfilePic(); | |
} | |
obj.thisVars = rcl; | |
obj.updateAVSettingsSymbol(rcl); | |
var v = ("a" == rcl.avsettings && obj.isInterview) || ("a" != rcl.avsettings && rcl.avsettings != "n"); | |
obj.setAttribute("visible", v); | |
obj.setAttribute("visibility", v ? "visible" : "hidden"); | |
if ($debug) Debug.write("setAVSettingsToClient: ", v, obj.visible); | |
]]> | |
</method> | |
<method name="startStream" args="publicSID,broadcastId,firstname,lastname,interviewPodId,width,height"> | |
<![CDATA[ | |
if ($debug) Debug.write("startStream: ", publicSID,broadcastId,firstname,lastname,interviewPodId,width,height); | |
var obj = this.getVideoObjectByPublicSID(publicSID); | |
//if ($debug) Debug.write("startStream obj: ",obj); | |
if (obj != null ){ | |
obj._chatvideoinner._videostream.playStream(broadcastId,-1); | |
obj.setDefaultVideoSize(width,height); | |
obj.setAttribute('chatpartnername',firstname+' '+lastname); | |
} | |
//we have to do this again when the stream starts, the initial video | |
//component does not know the interviewPodId as the user has not selected | |
//which interview video pod he is going to use | |
if (canvas.isInterview && interviewPodId != null && interviewPodId > 0) { | |
if ($debug) Debug.write("Is interview ",interviewPodId,"x",canvas["interviewPod"+interviewPodId+"_x"]); | |
obj.setAttribute("interviewPodId", interviewPodId); | |
obj.setAttribute("x",canvas["interviewPod"+interviewPodId+"_x"]); | |
obj.setAttribute("y",canvas["interviewPod"+interviewPodId+"_y"]); | |
obj.setAttribute("width",322); | |
obj.setAttribute("height",281); | |
} | |
return; | |
]]> | |
</method> | |
<!--- | |
Clear all views, probably this is caleld whenever a user leaves the room for example | |
--> | |
<method name="clearAll"> | |
<![CDATA[ | |
if ($debug) Debug.write("clearAll", this.subviews); | |
while(this.subviews.length > 0) { | |
this.subviews[0]._chatvideoinner._videostream._stop(); | |
this.subviews[0].destroy(); | |
} | |
if (canvas.inner.editRecordStream != null) { | |
canvas.inner.editRecordStream.destroy(); | |
} | |
return; | |
]]> | |
</method> | |
<!--- | |
Update the ismoderator flag, there is no need to check here which user | |
this happened already before sending it to the SWF10 app | |
--> | |
<method name="updateModerationFlag" args="moderator"> | |
<![CDATA[ | |
if ($debug) Debug.write("updateModerationFlag :: ",moderator); | |
this.setAttribute('ismoderator',moderator); | |
return; | |
]]> | |
</method> | |
<!--- | |
Update the canDraw,canShare,canRemote flag, there is no need to check here which user | |
this happened already before sending it to the SWF10 app | |
--> | |
<method name="setDrawAllowStatus" args="canDraw,canShare,canRemote"> | |
<![CDATA[ | |
if ($debug) Debug.write("setDrawAllowStatus :: ",canDraw,canShare,canRemote); | |
canvas.setAttribute("isAllowedToDraw",canDraw); | |
canvas.setAttribute("isAllowedToScreenShare",canShare); | |
canvas.setAttribute("isAllowedToRemoteControl",canRemote); | |
return; | |
]]> | |
</method> | |
<method name="setExclusiveAudioAllowStatus" args="canGiveAudio"> | |
<![CDATA[ | |
if ($debug) Debug.write("setExclusiveAudioAllowStatus :: ",canGiveAudio); | |
canvas.setAttribute("isAllowedToGiveExclusiveAudio",canGiveAudio); | |
return; | |
]]> | |
</method> | |
<!--- | |
Shows the window with device settings | |
--> | |
<method name="changeDevice"> | |
<![CDATA[ | |
if ($debug) Debug.write("changeDevice"); | |
new lz.changeDevice(canvas.inner, { | |
name:"changeDeviceDialog" | |
}); | |
return; | |
]]> | |
</method> | |
<!--- | |
Shows the exit dialog | |
--> | |
<method name="exitRoom"> | |
if ($debug) Debug.write("exitRoom"); | |
new lz.confirmationSingleSWF10(canvas,{ | |
refObj:this, | |
labelid:791, | |
labeliderror:790, | |
refReturnMethod:'immediateExitRoom', | |
showCheckBox:false | |
}); | |
return; | |
</method> | |
<method name="immediateExitRoom" args="bool,ctx"> | |
<![CDATA[ | |
if($debug) Debug.write("0"); | |
if (canvas.wicketsid != null && bool) { | |
if($debug) Debug.write("1"); | |
clearAll(); | |
if($debug) Debug.write("2"); | |
canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'exitRoom', bool); | |
if($debug) Debug.write("3"); | |
if($debug) Debug.write("Do disconnect 10:: ", canvas.thishib); | |
if (canvas.thishib._nc) { | |
canvas.thishib._nc.close(); | |
} | |
if($debug) Debug.write("4"); | |
canvas.thishib.disconnect(); | |
if($debug) Debug.write("5"); | |
canvas.thishib.src = null; | |
} | |
]]> | |
</method> | |
<method name="updateFirstLastName" args="publicSID,first,last"> | |
var v = getVideoObjectByPublicSID(publicSID); | |
if (v != null) { | |
v.setAttribute('chatpartnername', first + ' ' + last); | |
} | |
</method> | |
<!--- | |
Shows the close whiteboard dialog | |
--> | |
<method name="closeWhiteboard"> | |
if ($debug) Debug.write("closeWhiteboard"); | |
if (canvas.ismoderator || canvas.isAllowedToDraw) { | |
canvas.closeWhiteboardDialog = new lz.confirmationSingleSWF10(canvas,{ | |
refObj:this, | |
labeliderror:1313, | |
refReturnMethod:'closeWhiteboardConfirmMethod', | |
showCheckBox:false | |
}); | |
} else { | |
new lz.labelerrorPopupSWF10(canvas,{labelid:1366, errorlabelid:1365}); | |
} | |
return; | |
</method> | |
<method name="closeWhiteboardConfirmMethod" args="bool,sharedObjectData"> | |
canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'closeWhiteboard', bool); | |
</method> | |
<!-- arranges video pods --> | |
<method name="arrangeWindows"> | |
<![CDATA[ | |
if ($debug) Debug.write("arrangeWindows"); | |
var windowsList = this.subviews; | |
if (0 == windowsList.length) { | |
return; | |
} | |
windowsList.sort(this.sortFunction); | |
var offsetInPx = 40; | |
var initX = 20; | |
var initY = 20; | |
var xPos = initX; | |
var yPos = initY; | |
var rowHeight = windowsList[0].height; | |
// arrange windows with new positions | |
for (var winIdx = 0; winIdx < windowsList.length; winIdx++) { | |
var window = windowsList[winIdx]; | |
if (canvas.width < xPos + window.width) { | |
yPos += rowHeight + offsetInPx; | |
xPos = initX; | |
rowHeight = window.height; | |
} | |
if (canvas.height < yPos) { | |
initX += 10; | |
initY += 10; | |
xPos = initX; | |
yPos = initY; | |
} | |
window.setAttribute("x", xPos); | |
window.setAttribute("y", yPos); | |
window.bringToFront(); | |
xPos += window.width + offsetInPx; | |
} | |
]]> | |
</method> | |
<method name="setSessionId" args="session_id"> | |
canvas.setAttribute("sessionId", session_id); | |
</method> | |
<!-- @keyword private --> | |
<method name="sortFunction" args="el1, el2"> | |
<![CDATA[ | |
if (el1.height > el2.height) { | |
return -1; | |
} else if (el1.height < el2.height) { | |
return 1; | |
} | |
return 0; | |
]]> | |
</method> | |
</class> | |
</library> |