Feb 24

Una forma para realizar comunicación entre los prims internos de OpenSimulator o Second Life y el mundo externo es a través del uso de XML-RPC el cual permite enviar mensajes a un objeto dentro de una región, siempre y cuando este se haya registrado para recibir dicha comunicación.

Crear Script para Recibir Datos :

  • Abrir nuestro visor favorito y entrar al servidor de OpenSimulator o SecondLife
  • Crear un objeto
  • Adicionar un Script
  • Abrir el script
  • Colocar el siguiente codigo :
    default {
       state_entry()
       {
          llOpenRemoteDataChannel();
       }
    
       remote_data(integer type, key channel, key message_id, string sender, integer ival, string sval) {
          if(type == REMOTE_DATA_CHANNEL) {
             llOwnerSay("Canal : " + (string) channel + "");
          }
          else if(type == REMOTE_DATA_REQUEST) {
             llRemoteDataReply(channel,NULL_KEY,"Exito",1221);
             llOwnerSay("Cadena : " + sval + "nNumero: " + (string) ival);
          }
          else {
             llOwnerSay("Error");
          }
       }
    }
  • Guardar
  • En este momento el servidor debe compilar el script y muestra en el chat :
    [11:54]  Compile successful
    [11:54]  Primitive: Canal : 61b5e9ca-9378-4254-af36-d78d6ed839de
  • La cadena : 61b5e9ca-9378-4254-af36-d78d6ed839de es el identificador del canal por el cual escucha el prim, es diferente para cada prim

Enviar Datos con C# :

Se utilizara la libreria XmlRpcCS para realizar la comunicación entre la aplicación y el objeto en OpenSimulator o SecondLife.

  • Abrir una consola
  • Crear el directorio para el cliente
    mkdir clientxmlrpc
  • Cambiar al directorio
    cd clientxmlrpc
  • Copiar la libreria al directorio actual
    cp ../XmlRpcCS/XmlRpcCS.dll .
  • Crear un archivo Client.cs y adicionamos el siguiente codigo :
    using System.Collections;
    using Nwc.XmlRpc;
     
    public class Client {
            public static void Main() {
                    // Informacion del Servidor de Second Life
                    // Canal por donde escucha el cliente
                    string server = "http://xmlrpc.secondlife.com/cgi-bin/xmlrpc.cgi";
                    string channel = "eafc58de-5d8a-364e-d6d8-4c4cab0129f4";
     
                    // Parametros
                    Hashtable args = new Hashtable();
                    args.Add("Channel",channel);
                    args.Add("IntValue",12345);
                    args.Add("StringValue","Hello World!"); 
     
                    // Cliente XMLRPC
                    XmlRpcRequest request = new XmlRpcRequest();
                    request.MethodName = "llRemoteData";
                    request.Params.Add(args);
     
                    // Invocacion y Resultado
                    Hashtable ret = (Hashtable) request.Invoke(server);
                    System.Console.WriteLine(ret["StringValue"]);
                    System.Console.WriteLine(ret["IntValue"]);
            }
    }
  • Compilamos el codigo :
    gmcs -lib:. -r:XmlRpcCS.dll Client.cs
  • Ejecutamos
    mono Client.exe
  • Debe mostrar en pantalla los valores enviados por el objeto
    Exito
    1221
  • Mienstras tanto en OpenSimulator debe aparecer en el chat la informacion enviada
    Hello World!!! 12345

Para usar el mismo codigo con OpenSimulator la cadena server debe tener la direccion de nuestro servidor : http://<ipServidor>:<puerto>/cgi-bin/xmlrpc.cgi

Enlaces :

Tagged with:



En February 24 de 2009, Marlon J. Manrique escribió acerca de Cliente XML-RPC en Mono para OpenSimulator.
Feb 24

Actualmente algunos sistemas como OpenSimulator o Second Life utilizan servicios remotos basados en XML-RPC, por tal motivo es necesario utilizar una libreria para realizar los llamados a estos servicios, actualmente para Microsoft .NET podemos encontrar dos librerias :

Utilizaremos la libreria XmlRpcCS, la cual es utilizada por el proyecto OpenSimulator para implementar el servicio de XMLRPC que permite realizar llamados remotos a objetos en este mundo virtual.

Requerimientos :

  • Debemos instalar lo paquetes para compilar la libreria
    sudo apt-get install nant mono-2.0-devel libmono-winforms2.0-cil mono-1.0-devel

Construcción de la Libreria :

  • Abrir una consola
  • Descargar la ultima versión de la libreria
    http://sourceforge.net/project/platformdownload.php?group_id=123702
  • Por ejemplo la versión 1.10
    wget http://ufpr.dl.sourceforge.net/sourceforge/xmlrpccs/XmlRpcCS-1.10.zip
  • Descomprimir el archivo
    unzip XmlRpcCS-1.10.zip
  • Cambiar al directorio de la libreria
    cd XmlRpcCS
  • Compilar la libreria
    nant
  • El archivo XmlRpcCS.dll es creado

Enlaces :

Tagged with:



En February 24 de 2009, Marlon J. Manrique escribió acerca de Libreria XML-RPC para Mono.
Dec 03

Una forma para realizar comunicacion entre los prims internos de OpenSimulator y el mundo externo es a traves del uso de XML-RPC el cual permite enviar mensajes a un objeto dentro de una region, siempre y cuando este se haya registrado para recibir dicha comunicacion.

Habilitar Modulo XMLRPC :

Aunque el modulo de XMLRPC se carga al ejecutar el servidor es posible que el numero del puerto remoto no este presente en la configuracion del servidor.

  • Editar el archivo OpenSim.ini y cambiar el motor de los scripts
    vi OpenSim.ini
  • Buscar la seccion de red [Network]
    Buscar la llave remoteDataPort
    Si esta presente identifique el puerto,
    si no, adicione la linea con el puerto donde quiere ejecutar el servidor
    remoteDataPort=20800
  • Ejecutar de nuevo el servidor
    ./OpenSim.exe

Crear Script para Recibir Datos :

  • Abrir nuestro visor favorito y entrar al servidor
  • Crear un objeto
  • Adicionar un Script
  • Abrir el script
  • Colocar el siguiente codigo :
     
    default {
       state_entry()
       {
          llOpenRemoteDataChannel();
       }
     
       remote_data(integer type, key channel, key message_id, string sender, integer ival, string sval) {
          if(type == REMOTE_DATA_CHANNEL) {
             llOwnerSay("Canal : " + (string) channel + "");
          }
          else if(type == REMOTE_DATA_REQUEST) {
             llRemoteDataReply(channel,NULL_KEY,"Exito",1221);
             llOwnerSay("Cadena : " + sval + "nNumero: " + (string) ival);
          }
          else {
             llOwnerSay("Error");
          }
       }
    }
  • Guardar
  • En este momento el servidor debe compilar el script y muestra en el chat :
    [11:54]  Compile successful
    [11:54]  Primitive: Canal : 61b5e9ca-9378-4254-af36-d78d6ed839de
  • La cadena : 61b5e9ca-9378-4254-af36-d78d6ed839de es el identificador del canal por el cual escucha el prim, es diferente para cada prim

Enviar Datos :

Se pueden enviar datos al prim utilizando cualquier lenguaje de programacion que soporte XML-RPC. En nuestro caso utilizaremos Java con una libreria para soporte de RPC

  • Descargar la libreria para soporte de XML-RPC
    http://www.perisic.com/xmlrpc/cis69mc.jar
  • Crear el Archivo SLClient.java y adicionar el siguiente codigo :
     
    import java.util.*;
    import org.apache.xmlrpc.*;
     
    public class SLClient {
       public static void main (String [] args) {
          try {
             Hashtable theData = new Hashtable();
             theData.put("Channel",args[2]);
             theData.put("IntValue",2483);
             theData.put("StringValue","La fecha es: "+ (new Date()).toString() );
     
             Vector params = new Vector();
             params.add(theData);
     
             XmlRpcClient server = new XmlRpcClient("http://" + args[0] + ":" + args[1]
                 + "/cgi-bin/xmlrpc.cgi");
             Object result = server.execute("llRemoteData", params);
             System.out.println(result);
          }
          catch (Exception e) {
             e.printStackTrace();
          }
       }
    }
     
  • Compilar
    javac -cp cis69mc.jar;. SLClient.java
  • Ejecutar
    java -cp cis69mc.jar;. SLClient <IpServidor> <Puerto> <canal>
    Ejemplo
    java -cp cis69mc.jar;. SLClient 192.168.1.3 20800 61b5e9ca-9378-4254-af36-d78d6ed839de
    Debe mostrar en pantalla
    [{StringValue=Exito, IntValue=1221}]
  • Mienstras tanto en OpenSimulator debe aparecer en el chat la informacion enviada
    [12:09]  Primitive: Cadena : La fecha es: Wed Dec 03 15:09:33 COT 2008
    Numero: 2483

Nota :

Esta es la forma en que una aplicacion externa puede enviar un mensaje a un objeto dentro del mundo virtual, haciendo que este realice cierta accion dentro del mundo. Una de las limitantes de este mecanismo es que solo se provee un metodo llamado llRemoteData que recibe una cadena y un entero, no se pueden crear metodos propios, lo mismo sucede con la respuesta del prim.

Tagged with:



En December 3 de 2008, Marlon J. Manrique escribió acerca de LSL XML-RPC en OpenSimulator.