Comunidad de diseño web y desarrollo en internet online

Problema con FMS, Shared Objects y AS3

Citar            
MensajeEscrito el 23 Ene 2012 11:06 am
Hola a todos, necesito hacer un Chat con FMS, Shared Objects y AS3.
Hasta el momento he estado trabajando con RED5, pero al pasarme a FMS no consigo crear una conexión. Por lo que he estado viedo en FMS tengo que poner un archivo en la carpeta de la aplicación.
Para mi proyecto sería muy importante tener el mínimo código en esa carpeta, y si puede ser sin código mejor. Seria genial poderlo gestionar todo desde un GlobalObject.
Alguien puede decirme donde encontrar un ejemplo/tutorial de como crear un Chat en FMS y Shared Objects?
Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Ene 2012 12:09 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Ene 2012 12:35 pm
Hola Jorge, gracias por la respuesta. He conseguido crear una conexión, pero no consigo pasar un mensaje de chat a través de ella. A ver si puedes ver el error:

Clase Interaction.as

Código ActionScript :

private var ncFMS:NetConnection;
private var roFMS:GlobalObject;
public function Interaction():void
{
   roFMS = new GlobalObject();
   roFMS.addEventListener("onMessage", publishMessage);

   ncFMS = new NetConnection();
   ncFMS.addEventListener(NetStatusEvent.NET_STATUS, onNetStatusFMS);
   ncFMS.connect("rtmp://localhost:1936/live/0");
   ncFMS.client = this;
}
private function onNetStatusFMS(e:NetStatusEvent):void
{
   trace(e.info.code);
   switch (e.info.code) 
   {
      case "NetConnection.Connect.Success":
      if (roFMS.connect("0", ncFMS, false) == true)
      {
         trace("true");
         roFMS.sendMessage("Hello World"); //Aquí SÍ LLEGA
      }
      else
      {
         trace("Error creando el RED5 SharedObject");
      }
      break;
   }
}
private function publishMessage(e:Event):void
{
   trace("publishMessage = " + e.target.chatMsg);
}

Clase GlobalObject.as

Código ActionScript :

public class GlobalObject extends EventDispatcher
{
   private var nc:NetConnection;
   public var soName:String;
   public var so:SharedObject;
   public var connected:Boolean;
   public var chatMsg:String = "";
   public var docObj:Object
   public var rect_ar:Array = new Array(4);
      
   public function GlobalObject()
   {
      super();
   }
      
   public function connect(p_soName:String, p_nc:NetConnection, p_persistant:Boolean):Boolean
   {
      // store Connection reference
      nc = p_nc;
      soName = p_soName;
      // create StoredObject
      trace("connectat al SO = " + p_soName+ ", nc.uri = " + nc.uri + "-->" + p_persistant);
      so = SharedObject.getRemote(p_soName, nc.uri, p_persistant);
      so.client = this;
      // setup the onSync events
      so.addEventListener(SyncEvent.SYNC, onSync);
      // connect to the SO
      connected = !so.connect(p_nc);
      return connected;
   }
      
   public function disconnect():void
   {
      so.close();
   }

   public function chatMessage(msg:String):void
   {
                trace("message2 " + msg); // Aquí NO LLEGA
      chatMsg = msg;
      dispatchEvent(new Event("onMessage", chatMsg));
   }
      
   public function onSync(evt:SyncEvent):void
   {
      // an update has been recieved, send out to the concerned parties
      trace("onSync");
   }
      
   public function sendMessage(msg:String):void
   {
      trace("message " + msg); // Aquí SÍ LLEGA
      so.send("chatMessage", msg);
   }
}

Alguna idea? No me da errores de compilación ni nada por el estilo, pero no consigo que el "so.send()" mande la información.

Muchas gracias.

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Ene 2012 12:55 pm
En principio lo unico malo que veo es el nombre que le das al SharedObject, "0" puede tener errores de conversión, usa un string+nr si quieres, pero no un nro haciendo de string.
Al SO le puedes agregar un listener al netStatus igual que lo haces con el NetConnection par recibir mensajes de error. Si no has recibido el onSync, es que no ha conectado

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Ene 2012 02:29 pm
Hola Jorge, tal como dices, no recibo el "onSync", entonces le he agregado el "NetStatusEvent" como puedes ver en el siguiente trozo de código:

Código ActionScript :

public function connect(p_soName:String, p_nc:NetConnection, p_persistant:Boolean):Boolean
{
   // store Connection reference
   nc = p_nc;
   soName = p_soName;
   // create StoredObject
   trace("connectat al SO = " + p_soName+ ", nc.uri = " + nc.uri + "-->" + p_persistant);
   so = SharedObject.getRemote(p_soName, nc.uri, p_persistant);
   so.client = this;
   // setup the onSync events
   so.addEventListener(SyncEvent.SYNC, onSync);
   so.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
   // connect to the SO
   connected = !so.connect(p_nc);
   return connected;
}
public function onSync(evt:SyncEvent):void
{
   // an update has been recieved, send out to the concerned parties
   trace("onSync");
}

public function onNetStatus(e:NetStatusEvent):void
{
   trace("NetStatus SO = " + e.info.code);
}

Pero tampoco me entra en el NetStatus ni me da ningún error. Al nombre del SO ya le he asignado un String.

Alguna otra idea?
Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Ene 2012 02:36 pm
Luego esta expresión no me convence

connected = !so.connect(p_nc);

hazlo

return so.connect(p_nc);

Que igual devuelve boolean.
Abre el panel de control del FMS y mira si se crea el SO y si te tira algun mensaje en la consola

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Ene 2012 02:50 pm
Hola Jorge, he cambiado la función que comentabas y desde la consola de FMS he visto como crea el SO correspondiente y en la ventana de Log no muestra nada, ni errores ni confirmaciones.

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Ene 2012 04:01 pm
No conectes a una instancia, conecta primero a la aplicación, live en vez de live/0, mira que tengas la carpeta creada, conecta mas de una instancia de la aplicación (dos navegadores), pruebalo tanto persistente como no, mira si hay log de error de la aplicación.
Si igual no puedes, busca un tuto de SO, es una operación básica de FMS, instala el tuto, mira que funcione, luego vuelve

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.