Resistance is Futile

Cliente XML-RPC en Mono para OpenSimulator

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 :


Libreria XML-RPC para Mono

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 :


MMetaverseSurface 0.1 y Second Life

Pruebas iniciales del desempeño y ejecucion de la version 0.1 de la aplicacion MMetaverseSurface que permite controlar un avatar a traves de una superficie. En esta primera prueba se utilizo la plataforma Windows, una camara Genius Slim 1322AF, Second Life y MMetaverseSurface 0.1

Evaluacion :

  • Para conectar el avatar a Second Life debe utilizarse el LoginURIy no el que se coloco en la documentacion :

    https://login.agni.lindenlab.com/cgi-bin/login.cgi

  • El avatar controlado se mostro como una macha blanca, lo que indica que no termino de descargar su apariencia. Se deben hacer mas pruebas para determinar el problema.
  • Al momento de mover el avatar dentro de Second Life, los edificios impiden que este se mueva libremente, se recomienda utilizar una region con pocos edificios para utilizar la superficie.
  • Adicionar la posibilidad de indicar las coordenadas de una zona de la region para que el avatar se mueva sobre esta y no sobre toda la superficie. Esto permitiria crear un espacio para utilizar la superficie.
  • A diferencia de OpenSimulator el avatar permanece quieto cuando el marcador esta quieto.
  • No se pudo probar el giro del avatar debido a que no se descargo la apariencia del cliente.

En terminos generales funciono como debia, solo se presento el problema inesperado de la apariencia del avatar. Las recomendaciones despues de la prueba se tendran en cuenta para la version 0.2 de la aplicacion.

Enlaces :


MMetaverseSurface 0.1

Siguiendo con los desarrollos para los metaversos, llega la primera version de la superficie para mundos virtuales MMetaverseSurface que permite controlar uno a mas avatars y objetos desde una superficie interactiva en la cual se colocan marcadores que representan dichos elementos.

Esta primera version es una prueba de concepto que busca identificar los elementos necesarios para crear este tipo de aplicaciones, por ejemplo para la creacion de la superficie se utilizara la aplicacion reacTIVision que permite capturar la posicion y angulo de marcadores, los cuales representaran los objetos y avatars; esta aplicacion utiliza una camara de video con soporte de firewire o una camara USB para capturar la imagen de la superficie e identificar cada uno de los marcadores, enviando la informacion de posicion y angulo de cada uno de estos. Para la comunicacion con los mundos virtuales se utiliza LibOpenMetaverse que permite interactuar con mundos virtuales como Second Life y OpenSimulator, esta libreria esta desarrollada en C# lo que hace necesario utilizar un cliente de reacTIVision para dicha plataforma, como tambien hacer el desarrollo de la aplicacion MMetaverseSurface es esta plataforma. Adicionalmente para el desarrollo se utiliza una plataforma Ubuntu Linux con la version de codigo abierto de la plataforma .NET llamada Mono y utilizando la herramienta NAnt para automatizar la construccion del software.

Actualmente la version 0.1 de la aplicacion permite controlar uno o mas avatars a los cuales se les ha asignado un marcador y que permite utilizando el simulador o el reacTIVision controlar el avatar dentro de la region en la que se encuentra, permitiendo cambiar la posicion y angulo en el que mira el avatar. Actualmente existen algunos problemas con el movimiento que hacen que el avatar no se quede estatico en una posicion, si no que opsilar entre dos posiciones.

Para las pruebas iniciales se utilizo como servidor OpenSimulator instalado en la misma maquina que la aplicacion lo que permite tener una respuesta muy rapida de los movimientos del avatar, tambien se utilizo el simulador de reacTIVision para tener el control preciso sobre la aplicacion.

Requerimientos :

  • Windows : Microsoft .NET Framework 2.0 (v2.0.50727 or later)
  • Linux : mono 1.9 - http://www.mono-project.com/

Instalacion :

  • Descargar el archivo con la distribucion de la aplicacion
  • Descomprimir
  • Editar el archivo mmetaversesurface/bin/MMetaverseSurface.exe.config y cambiar la url de autenticacion del mundo virtual.
    • Para Second Life utilice : https://login.agni.lindenlab.com
    • Para OpenSimulator utilice : http://192.168.1.4:9000 (cambiar la IP y el puerto a los de suservidor)
  • Editar el archivo mmetaversesurface/bin/avatars.txt
    Modificar la linea suministrando la informacion del avatar a controlar
    Id del Marcador, Nombre, Apellido, Clave
    El id del marcador es un numero que representa el marcador a utilizar dentro de reacTIVision

Ejecutar :

  • Ejecutar el TUIO Simulator o ejecutar la aplicacion reacTIVision
  • Ejecutar el MMetaverseSurface.exe
  • Conectarse al mundo virtual utilizando un avatar diferente al utilizado en la aplicacion
  • Teletransportarse a sitio donde se encuentra el avatar a ser controlado
  • Controlar el avatar utilizando los marcadores

Enlaces :


Creando el Primer Bot con LibOpenMetaverse

Despues de compilar la libreria de linopenmetaverse me dedique hacer el primer programa con la libreria, donde un avatar se autentique con el servidor y permanezca en el mundo un determinado tiempo y despues salga de este, esto con el fin de conocer el uso de la libreria y los pasos requeridos para compilar el programa.

Al principio solo dejaba al avatar cinco segundos en el mundo, pero al tratar de entrar de nuevo el servidor me sacaba diciendo que el avatar ya estaba logueado, entonces probe con 60 segundos, 30 segundos, al final me quede con 15 segundos asegurando asi que el proceso de autenticacion y loqueo se cumpla totalmente, para luego proceder a cerrar la conexion.

  • Abrir una consola
  • Crear el directorio para nuestro programa
    mkdir MyBot
    cd MyBot
  • Copiar las dlls necesarias de la libreria libopenmetaverse compiladas anteriormente
    cp <directorio libopenmv>/trunk/bin/OpenMetaverse.dll .
    cp <directorio libopenmv>/trunk/bin/OpenMetaverseTypes.dll .
    cp <directorio libopenmv>/trunk/bin/OpenMetaverse.StructuredData.dll .
    cp <directorio libopenmv>/trunk/bin/log4net.dll .
  • Crear el programa en C#
    vi MyBot.cs

    using System;
    using System.Threading;
    using OpenMetaverse; // Libreria de Acceso OpenSimulator
     
    public class MyBot
    {
            public static void Main()
            {
                    // Crear cliente
                    GridClient client = new GridClient();
     
                    // Informacion acerca del avatar y la aplicacion
                    LoginParams loginParams =
                             client.Network.DefaultLoginParams(
                                    "Juan","Perez","1234","MyBot","0.1");
     
                    // Colocamos la direccion de nuestro simulador
                    loginParams.URI = "http://192.168.1.3:9000/";
     
                    // Tratamos de entrar
                    if(client.Network.Login(loginParams))
                    {
                            // Si entramos sacamos un mensaje,
                            // esperamos 15 segundos
                            // y salimos del mundo
                            Console.WriteLine("Entrando ...");
                            Thread.Sleep(15000);
                            client.Network.Logout();
                    }
                    else
                            // Si no fue posible loguearse, mostrar error
                            Console.WriteLine(client.Network.LoginMessage);
            }
    }
  • Compilar el programa :
    gmcs -lib:. -r:OpenMetaverse.dll MyBot.cs
  • Ejecutar el programa :
    mono MyBot.exe

Para verificar que esto esta funcionando puede abrir el visor y entrar con un usuario a la zona inicial de la region, cuando ejecute el programa Juan Perez aparecera por unos momentos.


Page 1 of 212
Powered by WordPress | Designed by Elegant Themes