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.
Crear Script para Recibir Datos :
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"); } } }
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
http://www.perisic.com/xmlrpc/cis69mc.jar
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(); } } }
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.
No hay entradas relacionadas.
[...] LSL XML-RPC en OpenSimulator http://www.marlonj.com/blog/2008/12/lsl-xml-rpc-en-opensimulator [...]
Hola! En primer lugar, darte las gracias por toda la información que das en tu blog. Es muy interesante y ayuda mucho.
Me gustaría hacerte una consulta. Estoy tratando de comunicar OS con el exterior. Los scripts lsl y java funcionan correctamente. Pero el problema que me encuentro, es que cada vez que salgo de OS y vuelvo a entrar, me cambia el canal de comunicación con el objeto, y tengo que cambiarlo manualmente en mi clase Client.java. Hay alguna forma de hacer esto de forma automática? Es decir, es posible que el script lsl del objeto, le diga a la clase Client.java cuál es su canal de comunicación? O es posible hacer que el canal sea siempre el mismo, que no se modifique?
Muchisimas gracias por adelantado. Agradezco cualquier tipo de ayuda.