Video Conferencia

From Dokeos

Jump to: navigation, search

Integración de Servidores:

La nueva funcionalidad de Video Conferencia de Dokeos se basa ahora en 3 servidores adicionales para proporcionar el entorno de video conferencia. Propiamente dicho en realidad son dos servidores TomCat y Red5, OpenLaszlo es un servlet, podría comprenderse como un compilador para renderizar la aplicación (interfase de ususario).

Trabajo esta en camino para necesitar solo el servidor Red5 (y quitar la necesidad del servidor Tomcat).


  • TomCat: Servidor de aplicaciones JAVA (Servlet's y JSP)
  • Red5: Servidor alternativo a Flash Transiciones
  • Laszlo: Servidor de ambientes cinemáticos

El paquete (dokeos-openlaszlo-1.8) incluye el servidor TomCat., aunque al momento de la revisión puede presentar alteraciones sobre algunos sistemas respecto a los nombres de archivo que se corregirán en un futuro cercano. Por el momento es una aventura intentar instalarlo así que tómelo con calma.



Algunos de los presentes temas ayudarán a comprender e instalar con mayor suavidad el sistema de videoconferencia que es duda una de las fortalezas más importantes de la versión actual.

  • Conocimientos del lado del servidor
  • Tendencias de los desarrollos actuales RIA sobre los que se base la propuesta openLaszlo
  • Esquemas de trabajo en los servidores de contenedores tipo TomCat para correr WAR (Archivos de Recursos Web)
  • Paradigmas de los servlets de conformidad con J2E SUM

Sinopsis del funcionamiento del sistema de video conferencia DOKEOS

El modelo se base en 3 servidores: Apache Jerónimo donde corre la aplicación Dokeos, Toma Cat para el intercambio dinámico de los datos entre la aplicación LPS de openLazlo y red5 y las respuestas desde estos dos hacia apache en la aplicación dokeos.\

Todo ello se realiza en forma transparente para el usuario quien solo ve una aplicación corriendo en dokeos "la interfase gráfica". Sin embargo para que tales transacciones sean posibles son necesarios algunos pasos importantes para la comunicación de los datos. El aspecto mágico e importante consiste en crear el Plugin de conexión de puertos entre apache y tomCat lo cual es provisto por una extención de apache denominada mod_jdk la cual ha sido creada tanto para apache como para IIS. Esto quiere decir que si prefiere utilizar IIS por que se sienta más cómodo o con un conocimiento mayor puede preferir una DLL o bien un modulo .so para su distribución de apache.

En función de cualquier bifurcación que opte IIS o Apache necesitará crear el proceso complementario para la configuración de TomCat consistente en la creación de un mecanismo llamado WOKERS. Estos workers serán los que se encargarán realmente de hacer el paso mágico de los datos entre tomCat sus procesos y la respuestas devueltas al maravilloso puerto 80.

La aplicación LPS de openlazlo se comunica vía remota al servidor RED5 para crear los flujos de información en los diversos esquemas de funcionamiento tales como grabación, streaming o eco para crear los contenidos en FLV o Video conferencia en tiempo real. Una forma sencilla de comprender estos procesos de programación distribuida son similares a una mesa de billar donde el proceso (información) se envia a una banda y esa la empuja a la siguiente banda hasta completar las tres bandas y hacer una carambola.

RED5 es más pesado que tomCat, así que necesitará una máquina potente con suficiente memoria ram ya que los servlets se compilan en tiempo de ejecusión y en el caso de red5 este necesita cargar cerca de 70 paquetes de clases JAVA para correr la aplicación. No así TomCat que opera con una cantidad menor.

Es importante tener claro cual es el ambito concrero de openlaszlo y tomCat para hacer un montaje dentro de un sistema que ya tenga tomCat corriendo y pueda en lo futuro realizar una actualización cuando el sistema mejore en una versión mejorada.

En el caso de RED5 el ambito del desarrollo es más unificado ya que RED5 tiene una estructura más predefinida.




Contents

Documentación temporaria

Elementos visuales de la videoconferencia

Image:videoconf.jpeg

estructura


functions (conference/global/functions)	
- script
- dataset:languageData 
-- handler:ondata 

Llama al method:parseLanugageObject

- method:parseLanugageObject

Llama al method:initScreen

Para mostrar el mensaje connecting to streaming server con el setAttribute

Tenemos al rtc.connect

- dataset:getSessionVarsData

Envia el URL de su servidor ==> http://main/webrooms/checksession.php

-- handler:ondata 

Captura el valor del XML por ejemplo: childNodes[0].childNodes[1].childNodes[5].childNodes[0] = the content of the <official_code> element
 
- dataset:getSessionVars

Muestra el mensaje del loading session data

Llama al dataset:getSessionVarsData

- method:addChatHistory

Recupera los valores del nombre del cliente y el apellido

- method:getFormatedChatHistory


- method:addBroswerTabHistory
- method:setModeratorName

Recupera los valores del streamid y moderatorStreamID

- method:addFolderSequence

Recupera los valores del foldername

camera (videoconference/Server/dokeos/lps/components/extensiones/av/camera)
- class:camera
-- event:onshow
-- event:onindex 
-- method:getCameraNames
-- method:setIndex
-- method:showCamera
-- method:_showCamera
-- method:setMode
-- method:setQuality

videoview (videoconference/Server/dokeos/lps/components/extensiones/av/videoview)
- class:stream
-- event:onurl
-- method:init
-- method:setWidth
-- method:setHeight
-- method:setUrl

stream (videoconference/Server/dokeos/lps/components/extensiones/av/stream)
- class:stream
-- method:_publishSetup
-- method:broadcast
-- method:record
-- method:_updateRecordTime
-- method:stop
-- method:_findnc
-- method:_createStream
-- method:play
-- event:onmute
-- event:onlevel
-- method:init
-- method:_initMic
-- method:setMute
-- method:_updateLevel
-- method:_updatePlayTime
-- method:pause
-- method:init
-- method:_namefromurl
-- method:_setUrl
-- method:setUrl

microphone (videoconference/Server/dokeos/lps/components/extensiones/av/microphone)
- class:microphone
-- event:onindex
-- method:setIndex
-- event:onmute
-- event:onlevel
-- method:init
-- method:_initMic
-- method:setMute
-- method:_updateLevel

videoconnection (conference/videoconnection)
- name:thisrct id:rtc
-- handler:onconnect
-- handler:onerror
-- netremotecall:setId
--- handler:ondata
-- netremotecall:setUserObjectOne2Four
-- handler:ondata
-- netremotecall:setUserObjectNewOne2Four
--- handler:ondata
-- netremotecall:getCurrentModerator
--- handler:ondata
-- netremotecall:newStream
--- handler:ondata
-- netremotecall:closeStream
--- handler:ondata
-- netremotecall:clientregisterRoom
--- handler:ondata
-- netremotecall:roomDisconnect
--- handler:ondata
-- netremotecall:getFiles
--- handler:ondata
-- netremotecall:sendVars
--- handler:ondata
-- netremotecall:sendVarsToWhiteboard
--- handler:ondata
-- netremotecall:setModerator
--- handler:ondata
-- netremotecall:sendMessage
-- netremotecall:sendVarsToMessage
--- handler:ondata
-- netremotecall:sendVarsModeratorGeneral
--- handler:ondata
-- netremotecall:sendVarsToMessageWithClient
--- handler:ondata
-- netremotecall:createPoll
--- handler:ondata
-- netremotecall:newPoll
--- handler:ondata
-- netremotecall:vote
--- handler:ondata
-- netremotecall:getVotes
--- handler:ondata
-- netremotecall:getVotes
--- handler:ondata
-- netremotecall:checkHasVoted
--- handler:ondata
-- netremotecall:getPoll
--- handler:ondata
-- netremotecall:getPollTypeList
--- method:setReferenceObj
--- handler:ondata
-- netremotecall:sendVarsToModeratorGeneral
--- handler:ondata

rtmpconnection (conference/rtmpconnection)
- class:rtmpconnection
-- method:init
-- method:registerMethods
-- method:remoteCallMethod
-- method:callFuntion
-- method:connect
-- method:call
- class:netremotecall
-- method:call
- class:netparam

rtmpconnection (conference/rtmpconnection)
- class:rtmpconnection
-- method:init
-- method:registerMethods
-- method:remoteCallMethod
-- method:callFuntion
-- method:connect
-- method:call
- class:netremotecall
-- method:call
- class:netparam

videoconferencia2
- canvas
-- method:initScreen
-- method:getLabelName
-- view:bg
-- view:mainbackroundmenu
-- view:bg
-- videocontainer:_videocontainer (conference/videoclassroom/videocontainer)
--- class:videocontainer
---- method:addUser  
---- method:initializeStreams
---- netremotecall:getClientListScope
---- netremotecall:setUsername
---- netremotecall:getCurrentModerator
---- method:addItem 
---- method:addClientItem
---- method:startStream
---- method:getNewVideoObject
---- method:getNewVideoObjectByPos
---- method:closeStreamClient
---- method:disconnectclient
---- videoobject:_video1 (conference/videoclassroom/videoobject)
----- class:videoobject
------ method:getVideoReference 
------ method:setIdentifier
------ method:resetValues
------ view:_innertop
------ view:_chatvideoinner
------- videoview:_videoview (lps/componentes/extensiones/av/videoview)
-------- class:videoview
--------- event:onurl
--------- method:init
--------- method:setWidth
--------- method:setHeight
--------- method:setUrl
-------- stream:v_output
-------- camera:cameraRef (lps/componentes/extensiones/av/camera)
--------- class:camera
--------- method:init
--------- method:getCameraNames
--------- method:setIndex
--------- method:showCamera
--------- method:showCamera
--------- method:setMode
--------- method:setQuality
-------- microphone:microphoneRef (lps/componentes/extensiones/av/microphone)
--------- class:microphone
---------- method:setIndex
---------- event:onmute
---------- event:onlevel
---------- method:init
---------- method:_initMic
---------- method:setMute
---------- method:_updateLevel
------ view:_loadness
------- method:setLevel
------- view:_loudness
------ view:resource:messagebox_info_rsc
------ view:infoview
------ view:infostuff
------- method:initUserObject
------- view:infoview
------- view:inner
-- moderationpanelclass (conference/moderation/moderationpanelclass)
--- class:moderationpanelclass
-- menubardokeos:_menubardokeos (conference/tabbar/menubardokeos)
--- class:charttabutton 
--- class:participantstabutton
--- class:librarytabutton
--- class:uploadtabutton
--- class:wwwtabutton
--- class:menubardokeos
---- innerdokeoslist:contentlist
---- view:_tabscontent
----- method:clearContent
--- class:innerdokeoslist
---- method:setSelection
---- charttabutton
---- uploadtabutton
---- participantstabutton
-- whiteboard:_whiteboard (conference/whiteboard/whiteboard)
--- class:whiteboard
---- method:sendConfirmation
----  method:getconfirmationscode
---- method:resetDefaultConfirmations
---- method:clearAreaAndAddImage
---- view:backgroundtools_rsc
---- view:_paintmenu
----- method:selectButton
---- basedrawsave:_drawarea
----- method:onsharedMessage
---- view:boundboxesView
--- handler:onsharedMessage
--- handler:isloadingImage
--- handler:isloadedImage
-- view:currentmainobjectisMod
-- htmlbg:_htmlbg  (conference/tabcontent/wwwtab)
--- class:htmlbg 
---- view:htmlbgstuff
----- view:_htmlside
------ method:getText
------ method:setText
------ inputtext:_ctext 
------- method:event:onkeyup
----- button:_button 
------ method:sendEvent
----- basedrawchoose:resourceN:"close" 
----- view:resource:htmlbg
--- class:wwwtab
---- view:_uploadtaboutput
----- method:openbroowser
----- view:id:_browserhistory
------ method:addItem
------ view:histroy
------ vscrollbar:myscrollbar
--- class:browserhistoryItem
-- view:clickable:_hideit
-- rtmpstatus
-- view:main_content
--- view:_content
---- method:clearAll
-- view:close
--- handler:onclick
-- view:intro

Descripcion de Elementos

canvas

El canvas es el lienzo sobre el cual está desarrollada la aplicación desde la perspectiva de openlaszlo.

OpenLaszlo está conceptualizado bajo el paradigma de programación orientada a objetos y su propuesta como lenguaje de programación es crear aplicaciones RIA, Aplicaciones enriquecidas además de interactivas cinemáticas.

Utiliza sintaxis LZX como lenguaje de programación para generar los conceptos de clase, componentes o librerías auxiliandose de JAVASCRIPT para el flujo de control de la aplicación y el manejo de los eventos. LPS utiliza un compilador en JAVA por lo cual necesita correr dentro de un servidor de aplicaciones WEB JAVA.

Las graficas y librerias que representan los componentes tienen por objeto comprender más acerca de esta tecnología.

videocontainer

Descripcion de los métodos para la conexion con el servidor red5

Métodos

clase rtmpconnection

  • método init

Definimos un objeto de tipo de conexion NetConnection y hacemos una referencia local de la variable de conexion rtmpconnection, llama al método

registerMethods

  • método registerMethods

Registrar todos los métodos que son instanciados del netremotecall, si es de tipo netremotecall entonces se registra dentro del NetConnection llama al

método remoteCallMethod

  • método remoteCallMethod

Invoca al método callFuntion

  • método callFuntion

Si el valor del elemento del subnode es igual al nombre de la funcion entonces llama al método onResult

  • método connect

Este código trabaja, si la conexión no ha fallado

  • método call

Llama a los parametros, funciones u objetos y se vuelve a llamar a si mismo

clase netremotecall

  • handler ondata
  • método call

Hace referencia a la cadena de conexion mediante rtmpObject

  • método onResult

Llama a eventos pero no de forma automatica como lo hace el handler

clase netparam

Tiene un atributo name de valor null de tipo expression

Funciones: conference/global/functions

  • dataset:languageData

Trabaja con el idioma del sistema de la videoconferencia

Llama al método parseLanugageObject() (que tendria que llamarse parseLanguageObject())

  • method:parseLanugageObject()

Llama al método initScreen()

  • method:initScreen

Aqui estamos visualizando en la pantalla el mensaje connecting to streaming server

  • dataset:getSessionVarsData

Envia una ruta de navegacion donde envia los valores http:// {el URL de su servidor} /webrooms/checksession.php

  • handler:ondata

Con el setAttribute podemos mostrar los datos con el siguiente mensaje : loading language data

Aqui recogemos los valores enviados en el navegador y se visualizan

Invoca a al dataset languageData

  • dataset languageData
  • handler:ondata

Llama al método parseLanugageObject()

  • method:parseLanugageObject()

Recoge valores enviados de los arrays t y t2

  • method:getSessionVars()

Invoca al dataset:getSessionVarsData

  • method:addChatHistory()

Recupera los valores del nombre del cliente y el apellido

  • method:getFormatedChatHistory()
  • method:setModeratorName()

Recupera los valores del streamid y moderatorStreamID

  • method:addFolderSequence()

Recupera los valores del foldername

Conexion con el servidor streaming

Videoconnection

Esto es tanto para la videoconferencia.lzx como para la videoconferencia2.lzx

Dentro de Videoconnection existe un id="rtc" name="thisrct" de tipo rtmpconnection

En el src encontramos los atributos: protocolName, rmpthostlocal (tendria que ser rtmphostlocal), protocolPort y el currentcourse que es atributo del videoconference2.lzx

Function

En el dataset getSessionVarsData

Con el currentlanguage se aplica el idioma y con la variable addIt que por defecto es conf pregunta si es videoconferencia de una persona por eso acepta la

segunda videoconferencia

Diferencias entre la videoconferencia y la videoconferencia2

Videoconferencia

Videocontainer :

Dentro del netremotecall setUsername hay netparam que tienen métodos vars1, vars2 aqui esta official_code, vars3, vars4

Similitudes entre funciones de archivos del eclipse y java

(.lzx) y (.java)

Java Eclipse
Fichero Función Función Fichero
dokeos/WEB-INF/src org.dokeos.videoconference/Application.java setModerator netremotecall:setModerator videoconferencia/dokeos/ videoconference/conference/videoconnection
dokeos/WEB-INF/src org.dokeos.videoconference/Application.java setUsername netremotecall:setUsername videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
dokeos/WEB-INF/src org.dokeos.videoconference/Application.java getCurrentModerator netremotecall:getCurrentModerator videoconferencia/dokeos/ videoconference/conference/videoconnection
dokeos/WEB-INF/src org.dokeos.videoconference/Application.java getClientListScope netremotecall:getClientListScope videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
dokeos/WEB-INF/src org.dokeos.videoconference/Application.java sendVars netremotecall:sendVars videoconferencia/dokeos/ videoconference/conference/videoconnection
dokeos/WEB-INF/src org.dokeos.videoconference/Application.java sendVarsModeratorGeneral netremotecall:sendVarsModeratorGeneral videoconferencia/dokeos/ videoconference/conference/videoconnection
dokeos/WEB-INF/src org.dokeos.videoconference/Application.java sendMessage netremotecall:sendMessage videoconferencia/dokeos/ videoconference/conference/videoconnection
dokeos/WEB-INF/src org.dokeos.videoconference/RemoteService.java createPoll netremotecall:createPoll videoconferencia/dokeos/ videoconference/conference/videoconnection
dokeos/WEB-INF/src org.dokeos.videoconference/RemoteService.java getPollTypeList netremotecall:getPollTypeList videoconferencia/dokeos/ videoconference/conference/videoconnection
dokeos/WEB-INF/src org.dokeos.videoconference/RemoteService.java vote netremotecall:vote videoconferencia/dokeos/ videoconference/conference/videoconnection
dokeos/WEB-INF/src org.dokeos.videoconference/RemoteService.java getVotes netremotecall:getVotes videoconferencia/dokeos/ videoconference/conference/videoconnection
dokeos/WEB-INF/src org.dokeos.videoconference/RemoteService.java getPoll netremotecall:getPoll videoconferencia/dokeos/ videoconference/conference/videoconnection
dokeos/WEB-INF/src org.dokeos.videoconference/RemoteService.java checkHasVoted netremotecall:checkHasVoted videoconferencia/dokeos/ videoconference/conference/videoconnection
dokeos/WEB-INF/src org.dokeos.videoconference/RemoteService.java checkHasVoted netremotecall:checkHasVoted videoconferencia/dokeos/ videoconference/conference/videoconnection
dokeos/WEB-INF/src org.dokeos.videobeans/RoomClient.java setUsername netremotecall:setUsername videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
dokeos/WEB-INF/src org.dokeos.videobeans/UserSecurity.java setUsername netremotecall:setUsername videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
dokeos/WEB-INF/src org.dokeos.videobeans/UserSecurity.java setUsername netremotecall:setUsername videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
dokeos/WEB-INF/src org.dokeos.audiorecorder/RemoteService.java getListOfFiles netremotecall:getListOfFiles videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
dokeos/WEB-INF/src org.dokeos.audiorecorder/RemoteService.java getListOfFiles netremotecall:getListOfFiles videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
method:init videoconferencia/dokeos/ videoconference/rtmpconnection
method:registerMethods videoconferencia/dokeos/ videoconference/rtmpconnection
method:remoteCallMethod videoconferencia/dokeos/ videoconference/rtmpconnection
method:callFuntion videoconferencia/dokeos/ videoconference/rtmpconnection
method:connect videoconferencia/dokeos/ videoconference/rtmpconnection
method:call videoconferencia/dokeos/ videoconference/rtmpconnection
method:call videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:setId videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:setUserObjectOne2Four videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:setUserObjectNewOne2Four videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:getCurrentModerator videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:newStream videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:closeStream videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:clientregisterRoom videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:roomDisconnect videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:getFiles videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:sendVars videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:sendVarsToWhiteboard videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:setModerator videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:setNewModerator videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:sendMessage videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:sendVarsToMessage videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:sendVarsModeratorGeneral videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:sendVarsToMessageWithClient videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:createPoll videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:newPoll videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:vote videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:getVotes videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:checkHasVoted videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:getPoll videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:getPollTypeList videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:sendVarsToModeratorGeneral videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer
netremotecall:sendVarsToModeratorGeneral videoconferencia/dokeos/ videoconference/conference/videoclassroom/videocontainer

Cambios en el ícono "Members" (al dar clic en imágen bocina)

El moderador envia imágen a los demás usuarios

 Desarrollo ocurriendo ahora

En el método __GrantVoice del fichero videocontainer que se encuentra dentro del videoclassroom, para que el objeto sea visto por el moderador y los

demas participantes se tiene que crear un atributo de nombre objMessage :

<attribute name="objMessage" value="null" />

Este atributo es utilizado por el método __GrantVoice como un array de valores especificos del usuario :


 this.objMessage = new Array ();
 this.objMessage[0] = 'grantvoice';
 var nowTime = new Date();
 var datumsString = nowTime.getHours()+':'+nowTime.getMinutes();
 this.objMessage[1] = datumsString;
 Debug.write("Setting Message");
 this.objMessage[2] = 'openwindow';
 this.objMessage[3] = canvas.currentusename;
 this.objMessage[4] = ;
 this.objMessage[5] = canvas.currentusercolor;
 this.objMessage[6] = canvas.currentuserpos;			  	
 this.sendMessageWithClient.call();
 Debug.write("send: ",this.objMessage);


Fuera del método se creó un netremotecall de nombre sendMessageWithClient :


 <netremotecall name="sendMessageWithClient" funcname="sendMessageWithClient" remotecontext="$once{ canvas.thisrct }" >   
   <netparam name="vars"><method name="getValue">return this.parent.parent.objMessage;</method></netparam>
   <handler name="ondata" args="value">
     <![CDATA[
     //The onResult-Handler will be called by the rtmpconnection
     Debug.write("getValue : ",value);           
     ]]>
   </handler>   
 </netremotecall>

Tambien se agregó el método openWindow:

 <method name="openWindow">
   if(this._videosmall==null)
   {
     this._videosmall = new videoobjectsmall();
     Debug.write("openWindow ");
    }
 </method>


A este array

 this.objMessage[0] = 'grantvoice';

Llama al método grantVoiceAction() que se encuentra en el fichero videoconnection dentro del método sendVarsToMessageWithClient() :


else if (value.message[0]=='grantvoice'){
   canvas.grantVoiceAction(value.message,value.client);
 }


El método grantVoiceAction() es creado en la videoconferencia2 aqui tambien se llama al método openWindow() del fichero videocontainer :

 <method name="grantVoiceAction" args="value,client">
 	<![CDATA[
 	Debug.write("grantVoiceAction: ",value,client);
 	switch(value[2])
 	{
 	  case 'openwindow':
 	  	this._videocontainer.openWindow();
 	  	break;
 	  case 'closewindow':
 	  default:
 	    this._videocontainer.closeWindow();
 	    break;
 	}
 	]]>
 </method>


El moderador canceló el envio de imágen a los demás usuarios

 Desarrollo ocurriendo ahora

En el método ___RemoveVoice del fichero videocontainer que se encuentra dentro del videoclassroom, para que el objeto sea cerrado por el moderador y los

demas participantes se tiene que crear un atributo de nombre objMessage y es utilizado por el método ___RemoveVoice como un array de valores especificos

del usuario que esta ingresando.

El único detalle es el método closeWindow:

 <method name="closeWindow">
   Debug.write("closeWindow ");
   this._videosmall.destroy();
 </method>
Personal tools