Comunidad de diseño web y desarrollo en internet online

Problema al crear Chat

Citar            
MensajeEscrito el 05 Jun 2011 03:57 am
¡Hola amigos de Cristalab! Soy nuevo en el foro y quiero decir que me han ayudado en muchos problemas que he tenido por eso quiero agradecerles antes que nada ^^ .Siguiendo con problema es el siguiente:

He hecho un chat con el siguiente tutorial : http://www.cristalab.com/tutoriales/como-crear-un-chat-en-flash-c105l/

El chat ya lo hice entero pero el problema es que cuando intento entrar me queda en cargando y no arranca :roll: :roll: :roll: y ya me estoy poniendo un poco nervioso :twisted: :twisted: :twisted: .Por eso queria saber como podría solucionar ese problema.El código que utilizo es el siguiente:

Fotograma 1

Código :

//Traemos la clase "Usuario" de la carpeta "ClabServer"

//Ten en cuenta que no es necesario poner la extensión .as

//Pero SI debes colocar las mayusculas y minusculas como se debe

import ClabServer.Usuario;

//Debemos frenar la linea de tiempo para que no salte automaticamente

stop();

/* INICIALIZACIÓN DE VARIABLES */

/*Creamos una instancia de la clase "Usuario", la que maneja el login

  al chat*/

var user:Usuario = new Usuario();

/* EVENTOS DEL MOUSE */

//Este evento se ejecutara al darle click al boton entrar

entrar_btn.onRelease = function() {

   /* Usamos el metodo "login" de la clase "Usuario", que nos pide 3

      parametros; el primero es el nick del usuario, el segundo es, 

      la contraseña en caso de ser un usuario registrado (No es nuestro

      caso) y el tercero es una variable que en "verdadero" significa que

      sera un usuario anonimo, que en este caso, lo es */

   user.login(nick_txt.text, "", true);

   //Ponemos en "aviso_txt" el anuncio de carga mientras recibimos respuesta

   aviso_txt.text = "Cargando . . . ";

};

/* EVENTOS DEL CLABSERVER */

//La clase "Usuario" tiene un evento llamado "onLogin", que devuelve una 

//variable numerica llamada "respuesta"; esta cambiara de acuerdo a lo

//ocurrido en el login de un usuario determinado

user.onLogin = function(respuesta) {

   //La instrucción "switch" nos permitira elegir entre varias opciones

   //de repuesta

   switch (respuesta) {

   //Si el nombre de usuario ya esta en uso dentro del chat

   case Usuario.EN_USO :

      //Colocamos el aviso

      aviso_txt.text = "El nick esta en uso";

      //Limpiamos la caja de texto del nick

      nick_txt.text = "";

      //Salimos del switch

      break;

   //Si el nombre de usuario esta registrado en la DB del servidor

   case Usuario.REGISTRADO :

      aviso_txt.text = "El nick esta registrado";

      nick_txt.text = "";

      break;

   //Si no hay ningun problema

   case Usuario.OK :

      //Continuamos al siguiente keyFrame

      //Donde iniciara el proceso del chat

      gotoAndStop(2);

      break;

   }

};


Fotograma 2

Código :

//Frenamos la linea de tiempo

stop();

//Importamos la clase "Servidor" del "ClabServer"

import ClabServer.Servidor;

/* INICIALIZACIÓN DE VARIABLES */

/*"chat" es la conexión al servidor; una instancia de la clase

  "Servidor"; tiene 3 parametros, el primero es el usuario a 

  entrar, en nuestro caso, es la variable "user", el segundo 

  parametro sera la "sala de chat" a la que entraremos, que es

  un numero de 0 a 64999; en nuestro caso, sera la sala 1 */

var chat = new Servidor(user, 1);

/* EVENTOS DEL BOTON */

// El evento que se ejecutara al dar click al boton "Enviar"

enviar_btn.onRelease = function() {

   //Invocamos al metodo "enviar" de la clase "Servidor", cuyo

   // parametro es el mensaje a enviar al chat

   chat.enviar(mensaje_txt.text);

   //limpiamos el campo del mensaje

   mensaje_txt.text = "";

};

/* EVENTOS DEL CLABSERVER */

//El evento "onMensaje" se ejecuta cada vez que llega un mensaje

//nuevo al chat; por parametro recibe un objeto que contiene el

//nick y el mensaje del autor.

chat.onMensaje = function(mensaje:Object) {

   //añadimos el mensaje junto con el nick al chat

   chat_txt.text += "<"+mensaje.Nick+"> "+mensaje.Mensaje+"\n";

};

//El evento "onEntrada" se ejecuta al entrar un nuevo usuario

chat.onEntrada = function(userNuevo:Object) {

   //Avisamos en el chat de la entrada del nuevo usuario

   chat_txt.text += " * "+userNuevo.Nick+" ha entrado.\n";

};

//El evento "onSalida" se ejecuta al salir un usuario del chat

chat.onSalida = function(userViejo:Object) {

   //Avisamos en el chat de la salida del usuario

   chat_txt.text += "** "+userViejo.Nick+" ha salido.\n";

};



Como yo tengo Flash CS5 he cambiado una cosita ya que me tiraba error.No se si tiene que ver con el error pero lo que hice fue cambiar el código de Usuario.as, que venia en el pack del tutorial ( en la linea 58 ):

Código :

mx.remoting.debug.NetDebug.initialize();


Por este:

Código :

fl.remoting.debug.NetDebug.initialize();


(Por si las moscas les dejo el codigo entero del archivo as):

Código :

import mx.remoting.NetServices;
import mx.remoting.Connection;
import mx.remoting.RecordSet;
import mx.remoting.NetServiceProxy;
import mx.remoting.debug.NetDebug;
import ClabServer.*;

class ClabServer.Servidor extends ClabServer.Control{   
   
   //Variables privadas
   private var user:ClabServer.Usuario;
   private var room:Number;
   private var hilo:Number;
   private var hiloDesc:Number;
   private var hiloClean:Number;
   private var lastStamp:String;
   private var mensajes:Array;
   private var usuarios:Array;
   private var servSend:NetServiceProxy;
   private var servList:NetServiceProxy;
   private var servConec:NetServiceProxy;
   
   //Propiedades estaticas publicas
   //   Tipos de callback
   public static var MENSAJE = 0;
   public static var OBJETO = 1;
   public static var ENTRADA = 2;
   public static var SALIDA = 3;
   public static var LISTA = 4;
   public static var LAG = 5;
   public static var ERROR = 6;
   //   Tipos de respuesta de servidor
   //      0: Texto
   //      1: Variable de datos
   //      2: Entrada de usuario
   //      3: Salida de usuario
   
   //Variables publicas
   public var onMensaje:Function;
   public var onEntrada:Function;
   public var onSalida:Function;
   public var onObjeto:Function;
   public var onLista:Function;
   public var onLag:Function;
   public var onError:Function;
   public var lag:Number;
   public var conectados:Number;
   public var cargandoMsg:Boolean;
   public var cargandoLst:Boolean;
   
   //SOLO PARA DEPURAR
   private var lagMsg:Number;
   private var lastLagMsg:Number;
   private var cLagMsg:Number;
   private var lagLst:Number;
   
   function Servidor(elUsuario:ClabServer.Usuario, sala:Number) {
      fl.remoting.debug.NetDebug.initialize();
      room = sala;
      cargandoMsg = false;
      cargandoLst = false;
      onMensaje = onEntrada = onSalida = onObjeto = onLista = onLag = null;
      lastStamp = "0";
      lastLagMsg = 0;
      cLagMsg = 0;
      conectados = 1;
      this.user = elUsuario;
      mensajes = new Array();
      usuarios = new Array();
      //CODIGO DE 1r MENSAJE
      //CODIGO DE PARAMETRIZACIÓN DE INTERVALOS
      //CODIGO DE LANZAMIENTO DE RECIBIMIENTO DE MENSAJES (DE LMQLP)
      //Inicialización de Remoting
      NetServices.setDefaultGatewayUrl(gatewayURL);
      conn = NetServices.createGatewayConnection();
      //Inserta al usuario en la lista de usuarios del chat
      this.entrar();
      lista(this);
      hilo = setInterval(recibir,600,this);
      hiloClean = setInterval(ClabServer.Servidor.clean,10000,this);
      hiloDesc = setInterval(desconexion,32000,this);
      recibir(this);
   }
   
   private function callback(tipo:Number, datos) {
      if (tipo == ClabServer.Servidor.MENSAJE) {
         if (onMensaje != null) {
            onMensaje(datos);
         } else {
            trace("");
            trace(".:: ClabServer ::.");
            trace("No has declarado aun una función de mensajes");
            trace("Declarala asignando un nombre de función a la propiedad 'onMensaje' de esta clase");
            trace("Para mas información http://www.cristalab.com/");
         }
      }
      if (tipo == ClabServer.Servidor.OBJETO) {
         if (onObjeto != null) {
            onObjeto(datos);
         } else {
            trace("");
            trace(".:: ClabServer ::.");
            trace("No has declarado aun una función de recibo de objetos");
            trace("Declarala asignando un nombre de función a la propiedad 'onObjeto' de esta clase");
            trace("Para mas información http://www.cristalab.com/");
         }
      }
      if (tipo == ClabServer.Servidor.ENTRADA) {
         if (onEntrada != null) {
            onEntrada(datos);
         } else {
            trace("");
            trace(".:: ClabServer ::.");
            trace("No has declarado aun una función de entrada de usuarios");
            trace("Declarala asignando un nombre de función a la propiedad 'onEntrada' de esta clase");
            trace("Para mas información http://www.cristalab.com/");
         }
      }
      if (tipo == ClabServer.Servidor.SALIDA) {
         if (onSalida != null) {
            onSalida(datos);
         } else {
            trace("");
            trace(".:: ClabServer ::.");
            trace("No has declarado aun una función de salida de usuarios");
            trace("Declarala asignando un nombre de función a la propiedad 'onSalida' de esta clase");
            trace("Para mas información http://www.cristalab.com/");
         }
      }
      if (tipo == ClabServer.Servidor.LISTA) {
         if (onLista != null) {
            onLista(datos);
         } else {
            trace("");
            trace(".:: ClabServer ::.");
            trace("No has declarado aun una función de lista");
            trace("Declarala asignando un nombre de función a la propiedad 'onLista' de esta clase");
            trace("Para mas información http://www.cristalab.com/");
         }
      }
      if (tipo == ClabServer.Servidor.LAG) {
         if(onLag != null) {
            onLag(datos);
         }
      }
      if (tipo == ClabServer.Servidor.ERROR) {
         if (onError != null) {
            onError();
         } else {
            trace("");
            trace(".:: ClabServer ::.");
            trace("No has declarado aun una función de manejo de errores");
            trace("Declarala asignando un nombre de función a la propiedad 'onError' de esta clase");
            trace("Para mas información http://www.cristalab.com/");
         }
      }
   }
   //Inserta al usuario en la lista de usuarios de una sala
   private function entrar():Void{
      var envio:Object = new Object();
      envio.onStatus = this.errorAMF;
      servSend = conn.getService("ClabServer",envio);
      servSend.entrar(this.user.ID,this.user.nusuario,this.room);
   }
   private function desconexion(ambito){
      if(ambito.lastLagMsg == ambito.lagMsg){
         ambito.logout();
      }
      ambito.lastLagMsg = ambito.lagMsg;
   }
   
   //FUNCIONES GENERALES
   //Convierte un XML a un objeto
   private function XMLToObj(x:XML):Object {
      var xml:XML = x;
      var obj:Object = new Object();
      for (i in xml.firstChild.attributes) {
         obj[i] = xml.firstChild.attributes[i];
      }
      return obj;
   }
   //Convierte un objeto a un XML
   private function objToXML(obj:Object):XML {
      var compose:String;
      compose = "";
      for (var i in obj) {
         compose += i+'="'+obj[i]+'" ';
      }
      return new XML("<clab "+compose+"/>");
   }
   
   public function logout(){
      var envio:Object = new Object();
      envio.onStatus = this.errorAMF;
      servSend = conn.getService("ClabServer",envio);
      servSend.salir(this.user.ID,this.user.nusuario,this.room);
      callback(ClabServer.Servidor.ERROR);
      clearInterval(hilo);
      clearInterval(hiloClean);
      clearInterval(hiloDesc);
   }
   public function recibir(esto) {
      esto.getUsuarios();
      esto.serv = null;
      if(esto.cargandoMsg){
         trace("   ----------- lag");
         esto.cLagMsg++;
         if(esto.cLagMsg<30){
            return;
         }
      }
      esto.cLagMsg = 0;
      esto.cargandoMsg = true;
      //LISTENERS DE FLASH REMOTING
      var respuesta:Object = new Object();
      respuesta.padre = esto;
      respuesta.getMensajes_Result = function(data) {
         this.padre.cargandoMsg = false;
         this.padre.lagMsg = getTimer()-this.padre.lagMsg;
         var rs:RecordSet = data;
         var record:Object;
         var cantidad:Number = rs.getLength();
         this.padre.lag = this.padre.lagMsg;
         this.padre.callback(ClabServer.Servidor.LAG, this.padre.lag);
         if(cantidad>0){
            this.padre.mensajes = null;
            this.padre.mensajes = new Array();
            for(var it=0;it<cantidad;it++){
               //Esto hacia que no recibiera los primeros mensajes
               if(this.padre.lastStamp=="0"){
                  continue;
               }
               record = rs.getItemAt(it);
               if(record.IDUsuario == -1){
                  record.Nick = record.nick;
               }
               record.Mensaje= unescape(record.Mensaje);
               if(record.Tipo==ClabServer.Servidor.OBJETO){
                  record.Mensaje = this.padre.XMLToObj(new XML(record.Mensaje));
               }
               this.padre.mensajes.push(record);
            }         
            this.padre.lastStamp = rs.getItemAt(0).TimePrint + "";
            if(this.padre.mensajes.length){
               for (var i in this.padre.mensajes) {
                  this.padre.callback(parseInt(this.padre.mensajes[i].Tipo), this.padre.mensajes[i]);
               }
            }
         }
      };
      respuesta.onStatus = this.errorAMF;
      //CODIGO DE FLASH REMOTING
      esto.serv = esto.conn.getService("ClabServer", respuesta);
      esto.serv.getMensajes(esto.user.ID,esto.user.nusuario,esto.lastStamp,esto.room);
      esto.lagMsg=getTimer();
   }
   public function lista(esto){
      esto.servList = null;
      if(esto.cargandoLst){
         trace("   ----------- lag");
         return;
      }
      esto.cargandoLst = true;
      //LISTENERS
      var respuesta:Object = new Object();
      respuesta.padre=esto;
      respuesta.getUsuarios_Result= function(data) {
         this.padre.cargandoLst = false;
         this.padre.lagLst = getTimer()-this.padre.lagLst;
         trace("Lista: "+this.padre.lagLst);
         var rs:RecordSet = data;
         this.padre.usuarios = new Array();
         var cantidad:Number = rs.getLength();
         for(var it=0;it<cantidad;it++){
            this.padre.usuarios[it] = new Object();
            this.padre.usuarios[it].ID = rs.getItemAt(it).IDUsuario;
            if(this.padre.usuarios[it][0]>-1){
               this.padre.usuarios[it].Nick = rs.getItemAt(it).Nick;
            } else {
               this.padre.usuarios[it].Nick = rs.getItemAt(it).nick;
            }
            trace(">>>>>>"+this.padre.usuarios[it].Nick);
         }
         this.padre.callback(ClabServer.Servidor.LISTA, this.padre.usuarios);
      }
      respuesta.onStatus = this.errorAMF;
      respuesta.onStatus = this.errorAMF;
      //CODIGO DE FLASH REMOTING
      esto.servList = esto.conn.getService("ClabServer", respuesta);
      esto.servList.getUsuarios(esto.room);
      esto.lagLst=getTimer();
      trace("   Loading Lista");
   }
   //Rapidamente detecta y asigna la cantidad de usuarios en linea a una variable publica
   private function getUsuarios():Void{
      var respuesta:Object = new Object();
      respuesta.padre = this;
      respuesta.onStatus = this.errorAMF;
      respuesta.getConectados_Result = function(data){
         this.padre.conectados = data;
      }
      servConec = conn.getService("ClabServer",respuesta);
      servConec.getConectados();
   }
   public function enviar(mensaje:String) {
      trace("Enviando "+mensaje);
      var envio:Object = new Object();
      envio.onStatus = this.errorAMF;
      servSend = conn.getService("ClabServer",envio);
      servSend.enviar(ClabServer.Servidor.TEXTO,escape(mensaje),user.ID,room,user.nusuario);
   }
   public function enviarObj(obj:Object){
      trace("CS: Enviando Objeto");
      var envio:Object = new Object();
      var objXML:XML = objToXML(obj);
      envio.onStatus = this.errorAMF;
      servSend = conn.getService("ClabServer",envio);
      servSend.enviar(Servidor.OBJETO,escape(String(objXML)),user.ID,room,user.nusuario);
   }
   //FUNCIÓN ESTATICA DE LIMPIADO DE "NICKS" EN EL SERVIDOR
   public static function clean(esto){
      trace("\t\tLimpiando");
      var envio:Object = new Object();
      envio.onStatus = esto.errorAMF;
      esto.servSend = esto.conn.getService("ClabServer",envio);
      esto.servSend.clean();
   }
}


Lo cambie porque me tiraba un error de que no se podia encontrar un paquete.Aqui lo que decia:
"No se ha encontrado ninguna clase o paquete con el nombre 'mx.remoting.debug' en el paquete 'mx.remoting'."

Lo cambie pensando que como usaba flex no tenia que ir mx (Espero que no haya hecho cagadas :oops:)

Y despues de cambiarlo no me tiraba mas error pero pasa lo que dije anteriormente, me queda en cargando :shock:

Espero que me puedan ayudar!

Por Egary_Master

7 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Jun 2011 03:38 pm
En Flex tienes que usar AS3, esto está en AS2

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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