Comunidad de diseño web y desarrollo en internet online

Uso de XML Sockets

Citar            
MensajeEscrito el 13 Jul 2008 12:37 pm
Hola,

He empezado a mirarme el tema de los XML Sockets y hay algo que no termino de entender.

Si por ejemplo tenemos 2 juegos, un parchís y un dominó, pensados para ser multijugador y queremos distribuir a los jugadores en 4 salas distintas. La idea es sencilla, 4 salas, las cuales dispondrán de esos 2 juegos (un poco al estilo Yahoo). Pues bien, a la hora de utilizar los sockets... ¿cada vez que un usuario moviese una ficha, TODOS los jugadores conectados recibirían ese movimiento? Es decir, ¿se genera un solo XML para todas las salas y juegos? Lo veo un poco engorroso, por eso querría aclarar esto antes que nada.

No sé si tengo un error de concepto, ¿qué decís?

Saludos! ^^

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 14 Jul 2008 11:10 am
Usualmente lo recursos se vanb compartimentando, es pura y simple logica. sala, juego, jugadores, luego broadcast en ese juego, en esa sala, entodas las salas, etc. Casi cualquier servidor de socket existente para Flash maneja al menos el concepto de sala

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 Jul 2008 03:42 pm
como dato adicional [Sheer], yo uso SmartFoxServer para el desarrollo de juegos en As3(también se puede en as2) y ahí ya existen salas definidas o puedes crear las propias si quieres hacer lo que mencionas, quizás te ahorre un poco de trabajo ;) aqui hay ejemplos de code

Por eldervaz

BOFH

10964 de clabLevel

39 tutoriales
56 articulos

Genero:Masculino  

en algún lugar del mundo

clabbrowser
Citar            
MensajeEscrito el 14 Jul 2008 06:01 pm
Gracias a ambos por la ayuda.

He estado haciendo pruebas con el server Palabre y no parece tan complicado como imaginaba y creo que es más que suficiente para lo que necesito hacer, almenos por ahora. Lo que no he entendido es lo referente al broadcast. Supongo que el concepto de broadcast es simplemente "enviar info a cierto grupo de usuarios", ¿no? Es decir, "<msg toroom="X" >Hi everyone</msg>".

Lo apropiado será crearse una clase adaptada a ese server que con sus métodos facilite el transito de información y poco más.

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 15 Jul 2008 01:16 pm
Trabajé en una época con Palabre. Acá la clase que tenía para parsear un chat, por si te sirve

Código :

import mx.events.EventDispatcher;
import mx.utils.Delegate

class PalSocketChat extends PalSocket{
   private var _socket:XMLSocket
   private var status_txt:TextField
   //EventDispatcher needs these
    var addEventListener:Function;
    var removeEventListener:Function;
    var dispatchEvent:Function;
    var dispatchQueue:Function;   
   private var _nick:String //nickname in use
   private var _room:String //current room
   
   function PalSocketChat(){
      super()
      EventDispatcher.initialize(this)      
      _socket.onConnect = Delegate.create(this, onConnect)
      _socket.onXML = Delegate.create(this, onXML)
   }   
   /* onConnect callback */
   function onConnect(success:Boolean) {      
       dispatchEvent({type:"onConnect", success:success})      
   }
   function setRoom(room:String){
      _room = room
   }
   function onXML(msg) {
      var PalNode = msg.firstChild;
      var PalNodeName = PalNode.nodeName;
      var PalNodeValue = PalNode.firstChild.nodeValue;
      /*
      trace("--------------------------------------------")
      trace("PalNode->"+PalNode+"\nPalNodeName->"+PalNodeName+"\nPalNodeValue->"+PalNodeValue)
      trace("--------------------------------------------")      
      */
      switch(PalNodeName){
         case "connect":
             _nick = trim(PalNode.toString().split(":")[1].split("\"")[0])
              dispatchEvent({type:"onUserAccepted", user:_nick})
             break;
         case "joined":
            dispatchEvent({type:"onJoinRoom", room:PalNode.attributes.room})
            break;
         case "m":
            onMessage(PalNode)
            break;                     
         case "clients": //list of connected cliens
            onClients(PalNode)
            break;
         case "client": //client left
            if(PalNode.attributes.left)
            dispatchEvent({type:"onLeftRoom", user:PalNode.attributes.name})
            break;
         case "error":
             onError(PalNodeValue)
            break;
      }      
      debug('<font color="#007700">*'+getTimer()+'* <b>Incoming :</b> <br>'+x2h(msg.toString())+"</font>");
   }
   private function onMessage(node){
      if(node.attributes['r'] == _room) {
         var msg:String =""
         var col:String = node.attributes['color']
         var nick:String = node.attributes['f'];         
         msg = '<font color="'+col+'"><b>['+nick+'] : </b>'+node.firstChild.nodeValue+"</font><br>"
         dispatchEvent({type:"onMessage", msg:msg})         
      } else {         
         dispatchEvent({type:"onMessage", msg:"Message from : "+node.attributes['f']})   
      }      
   }
   private function onClients(node){
      var   users = new Array();
      if(node.hasChildNodes()) {
         var node_clients = node.childNodes;
         for(var p=0;p<node_clients.length;p++) {
            if(node_clients[p].nodeName == "client") {
               debug(node_clients[p].attributes['name']);
               users.push(node_clients[p].attributes['name']);
            }
         }
         dispatchEvent({type:"onClients", list:users})   
      }
   }
   private function onError(msg){
      dispatchEvent({type:"onError", msg:msg})   
   }   
}

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 19 Abr 2009 08:31 pm
buenas, tengo una duda:
hice una prueba con xml socket, utilizando AquaServer. En el .As ponia la direccion IP (que no era localhost) y el puerto.
me funcionaba bien, pero pensaba que asi, cualquier otro ordenador conectado a la red ya podia utilizarlo llamando a mi IP, pero no se establece la conexion.¿ Me he dejado algo?, o no ¿basta con que yo tenga el AquaServer funcionando en mi ordenador para que los demas utilicen los sockets?. gracias

Por daaran

2 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 20 Abr 2009 12:53 am
Tu ordenador tiene que tener una IP pública.
Tu ordenador debe servir un crossdomain.xml, hay un hilo superlargo sobre el tema, busca por crossdomain y sockets

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 May 2009 12:04 am
buenas otra vez. siente si es un hilo redundante pero es que no me acaba de ir
al fin me monte el servidor, cualquiera puede ver mi pagina, osea que funciona.
Sin embargo no consigo hacer funcionar la comunicacion entre cliente servidor con los sockets.
hice en el flash un objeto que se pone verde si se establece la comunicacion, rojo en la posicion inicial, y negro si no hay comunicacion. Un flash con un cuadrado manda la posicion x e y al otro flash con un circulo que sigue esa posicion.

en local me va bien , pero cuando llamo al flah desde otro ordenador, se lo descarga pero el objeto permanece en rojo.
como que tampoco falla la conexion...
luego en la ventana de comandos donde corre el socket en java aparece xxx.xxx.xxx.xxx (ip del cliente) conectado y al momento desconectado

he probado todo lo que he visto de crossdomain y policy file, y no se porque no va.
gracias

Por daaran

2 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 20 May 2009 11:34 am

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 May 2009 08:28 pm
hola otra vez. antes de nada gracias por la paciencia.
por repasar:
esta:
la parte servidor swf
el cliente .swf es en el que aparece el " System.security.loadPolicyFile( "xmlsocket://"+ ip + ":" + 1008 ); "
ese puerto no es el mismo que el de la conexion, no?
el servidor de java corre , utilizando otro puerto p.ej 2057
y aparte esta el crossdoman.xml..

me dejo algo?
es que he leido que es el servidor java es el que envia el policyfile por un puerto. (eso no se hacerlo)
y luego : es necesario hacer el try, catch finally ??

Mil gracias

Por daaran

2 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 20 May 2009 08:39 pm
La verdad es que ya no recuerdo los detalles, pero toda la info está en los hilos citados

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.