Comunidad de diseño web y desarrollo en internet online

AYUDA! Necesito que una función espere a un evento.

Citar            
MensajeEscrito el 14 Dic 2009 08:26 pm
Hola:

Tengo un problema y no sé cómo solucionarlo, el problema es el siguiente, quiero crear una Clases en flash AS3 y PHP, es un sistema de FTP, cuento con conocimiento de los dos lenguajes y llevo trabajando mucho tiempo con los dos lenguajes. Como jobí me pongo a crear componentes… jeje.

Es más, los tengo compilados y listo para instalar con el adobe extender... cuentan con Ayuda, Con su icono en el panel de componente y una librería como ayuda... los hago muy completos. ^^







Volviendo al tema:
El flash cuando se comunica, en este caso con el Script PHP, desencadena eventos. Como event.OPEN, event.COMPLETE. event.IO_ERROR, etc. Normalmente en la creación de un componente, Crearía una extensión de Evento. Y los resultados están en los eventos.

Por ejemplo serio incomodo verificar si un archivo existe en el servidor de este modo: :(

Código ActionScript :

import com.cross.ftp.*

var Ftp:ftp= new ftp();

Ftp.fileExist("Dir\\File.txt");
Ftp.addEventListener(Event.COMPLETE,
                function(event:ftpEvent)
                {
                  if(event.result){
                     // el archivo existe
                     } 
               });

Sería mucho más claro de este modo, y esto aria a la calidad: :D

Código ActionScript :

import com.cross.ftp.*

var Ftp:ftp= new ftp();

if(Ftp.fileExist("Dir\\File.txt")==true)
{
   // el archivo existe   
}


Estés el problema, voy a intentar ser lo más claro posible, porque ya e posteado una pregunta sobre este mismo tema y no entendieron a lo que me refiero.

Yo necesito que el resultado, en este caso booleano, de la función fileExist devuelva el valor del evento Complete. El sistema sería algo así:

Código ActionScript :

Funcion FileExist
   Envia la consulta al PHP
   La función espera al Evento Complete
   Retorna True o False
Fin Funcion


Es decir, La función tiene que esperar (Detenerse) al evento, y luego retornar.

El flash utiliza los eventos de forma asincrónica. Es decir, se ejecuta la función completa y retorna, y luego se ejecutan los eventos por separado.

En verdad estoy tratando de encontrar una forma de lograr esto :( , Capas que el sistema que pienso no es correcto, Acepto sugerencias, ayuda, etc. :D

Código Javascript :

Mi Hotmail es: [email protected] escríbanme


Gracias. Pueden escribirme para consultarme. :D

Por bycross02

16 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Dic 2009 09:43 pm
¿Estás intentando que algo asíncrono sea síncrono?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Dic 2009 09:44 pm
SI

Por bycross02

16 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Dic 2009 09:46 pm
Tienes que usar la clase socket, luego un servidor de socket que haga los chequeos y te devuelva la data inmediatamente, no lo veo como componente

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Dic 2009 09:48 pm
x que yo ago consulta a Script PHP con load y eso

Por bycross02

16 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Dic 2009 09:54 pm
pero la lase socket, se comunica con PHP? de forma sincrónica?, es decir, envía la consulta y espera al resultado si ejecutar nada mas? :?

Por bycross02

16 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Dic 2009 10:01 pm
Socket es un approach bastante mas complicado ...

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Dic 2009 10:05 pm
pero yo necesito que envié la petición y espere el resultado para retornar en la misma función.

Por bycross02

16 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Dic 2009 10:10 pm
¿Estás intentando que algo asíncrono sea síncrono? No se puede
¿Quieres que sea síncrono? Usa sockets, una función no espera a por un resultado a menos que sea callback.

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Dic 2009 10:12 pm
Ok. :D

Gracias voy a ver como se utiliza sockets y ya que estamos como hacer callback, jeje :lol:

Por bycross02

16 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Dic 2009 10:13 pm
El problema: implica tener socket montado en el servidor, y para un simple FTP eso es overkilling

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Dic 2009 10:16 pm
Perdona mi ignorancia, pero el servidor tiene que soportar socket?, vos que me recomendarías...
o como hacer callback?

Por bycross02

16 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Dic 2009 10:22 pm
Los callbacks de la clase Filereference ya los tienes y no te sirven, de hehco en realidad lo que quieres es saltarte un callback, preguntar y que te responda inmediatamente, para que eso ocurra tiene que existir un socket. Dado que casi ningún servidor compartido deja correr sockets en PHP y que los servidores de sockets están basados en Java, mi recomendación es que lo dejes como está ... sino tendrás un elegante componente que nadie usaría (a menos que tuviera su servidor dedicado)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 15 Dic 2009 05:45 am
He estado buscando en varios Foros...Sitios y asta en el mismo foro de Adobe y todos tienen el mismo problema, no se pueden crear cargas de forma sincrónica ( Synchronous) . :shock: Todos los que he visto tienen el mismo problema... Primero se termina la función y luego el evento. todo el flash esta hecho de forma Asincrónica (Asynchronous). :twisted:
y por lo visto no hay forma de cambiarlo...

Gracias... llegue a una conclucion que no pensé encontrar, por lo menos un sistema de bucle, pero ni eso se puede :( por lo visto.

Igual gracias por su ayuda :D

Por bycross02

16 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.