Java WIMS- und RPC-API von SLTalk & Partner

WIMS APIWer anspruchsvolle Projekte in Second Life® umsetzen möchte, merkt schnell, dass eine Komponente wie ein Business-Server erforderlich wird. Insbesondere in Projekten im kommerziellen Umfeld, bei denen es um mehr geht als die einfache Darstellung von 3D-Modellen. Hier geht es oftmals darum Gewinnspiele zu managen, Alterskontrollen zu realisieren, Transaktionen entlang einer Wertschöpfungskette zu steuern und zu monitoren oder sonstige Businesskomponenten auszulagern. Mit der InWorld-Sprache LSL kommt man nicht unbedingt weiter. LSL ist auf ca. 320 Build-In-Funktionen beschränkt, komplexere Datenstrukturen, Modularisierung und andere Standardkonzepte sind nicht möglich. Hier verliert man schnell den Überblick, wenn es um anspruchsvollere Anwendungen geht. Linden Lab® hat Second Life® glücklicherweise über das HTTP-Protokoll nach außen geöffnet. Von außen nach innen gelangt man über XML-RPCs. Somit ist schon einmal die Grundlage geschaffen, damit man geschäftsprozessübergreifende Komponenten nach außen verlagern kann. Und in der Tat empfehlen wir jedem, der anspruchsvollere Anwendungen realisieren möchte, die Businesslogik auf einen eigenen Business-Server auszulagern.

SLTalk & Partner implementiert im Rahmen der Projekte Standardkonzepte und generische Frameworks, sodaß ein hohes Maß an Wiederverwertbarkeit und schnellere Projektlaufzeiten ermöglicht werden. Ein Resultat unserer Arbeit ist eine API, die es ermöglicht von einem Java-Business-Server XML-RPCs InWorld aufzurufen.

Die API wird als Java-Archiv ausgeliefert und ist mit knapp 170 KB recht schlank. Bestandteil des JARs sind die XML-RPC-Klassen der Apache-Foundation sowie die Wrapper-Klassen von uns.

Klasse Beschreibung
WIMDDemo.java Ist eine Demo für einen WIMS-Java-Client und ruft unseren WIMS-Service auf Kybernethik 1 auf.
RPCDemo.java Ist die etwas mehr generischere Version und ermöglicht es jeglichen XML-RPC-Server in Second Life® aufzurufen.
avameo.jar Enthält die notwendigen XML-RPC-Klassen der Apache Foundation sowie die nachfolgenden Wrapper-Klassen von SLTalk & Partner
de.avameo.rpc.client.RPCClient Mit dieser Klasse lassen sich mit Leichtigkeit beliebige XML-RPC-Clients realisieren, welche InWorld-XML-RPC-Server aufrufen
de.avameo.rpc.client.RPCClientFactory Diese Klasse implementiert das Factory-Pattern, um einen RPCClient für einen bestimmten Channel zu erzeugen
de.avameo.rpc.wims.WIMSClient Ist ein spezieller Client, welcher unseren WIMS-Servive auf Kybernethik 1 ansteuert. Mit diesem Java-Client kann man von außerhalb Second Life® Instant Messages an Residents schicken.
de.avameo.rpc.common.Key Diese Klasse repräsentiert eine Second Life® UUID und lässt nur gültige UUID-Keys zu.
de.avameo.rpc.common.InvalidUUIDKeyException Diese Exception wird von der Klasse Key geworfen, wenn mit einem String keine gültuge SL-UUID erzeugt werden kann.

Es wurde bewußt darauf geachtet, die API möglichst schlank zu halten, um die Anwendung für den Entwickler so einfach wie möglich zu gestalten. In diesem Beitrag stelle ich daher unseren generischen SL-XML-RPC-Client vor und eine spezielle Implementierung dieser API, die unseren kostenlosen WIMS-Service auf KybernEthik 1 ansteuert. Eine WIMS (Web Instant Message 2 Secondlife) lässt sich aus dem Java-Kontext in nur drei Zeilen programmieren. Jeder beliebige andere XML-RPC-Dienst lässt sich über den etwas generischeren Client mit 6 Aufrufen realisieren.

Beide Möglichkeiten möchte ich folgend erläutern.

Erzeugen eines WIMS-Clients

WIMSDemo.java erzeugt einen AvatarKey und versendet eine WIMS, nachdem ein WIMSClient erzeugt wurde
import de.avameo.wims.WIMSClient;
import de.avameo.common.Key;

public class WIMSDemo
{
  public static void main(String argv[])
  {
     WIMSClient client = WIMSClient.getInstance();
       try
       {
          Key avatarKey = 
          new Key("b3e9197e-9dc5-45ee-9029-d45de3742944");
          client.sendWIMS(avatarKey, "DemoNachricht");
       }
       catch(Exception e)
      {
         e.printStackTrace();
      }
    }
}



WIMSDemo.java

Einfach oder? Mit nur drei Zeilen Java-Code. Die etwas allgemeinere Methode sieht wie folgt aus:

Erzeugen eines WIMS-Clients

RPCDemo.java erzeugt einen AvatarKey, an den die WIMS geschickt wird. Außerdem erzeugt die Klasse einen Key fuer den Channel, unter dem unser WIMS-Service erreichbar ist. Anschließend wird ein RPC-Client über die RPCClientFactory erzeugt und der Integer-Wert sowie der String-Wert gesetzt, die an den RPC-Channel übertragen werden.

import de.avameo.wims.WIMSClient;
import de.avameo.common.Key;

import de.avameo.rpc.client.RPCClientFactory;
import de.avameo.rpc.client.RPCClient;
import de.avameo.common.Key;
import java.util.HashMap;

public class RPCDemo
{
 public static void main(String argv[])
 {
    Key channelKey = null;
    Key avatarKey  = null;
    RPCClientFactory factory = RPCClientFactory.getInstance();

    try
    {
      // UUID SLTalk & Partner WIMSServer
      channelKey = 
      new Key("f3637e68-759b-8819-5df9-94a889dc69ff"); 


      // UUID Patrick Wunderland
      avatarKey  = 
      new Key("b3e9197e-9dc5-45ee-9029-d45de3742944"); 
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

    RPCClient client = factory.createClient(channelKey);

    client.setIntVal(0);
    client.setStringValue(
    avatarKey.getUUIDString()+"Dies ist eine TestNachricht ");
    HashMap result = client.executeRPCCall();
    System.out.println("Result="+result);
    }
}
RPCDemo.java

Voilá, das war`s Mal wieder vom TechTalk. Euer Patrick Wunderland auf www.avameo.de :-) Achja, bevor ich es vergesse! Hier die Downloads:

Datei Beschreibung
WIMSDemo.java Ist eine Demo für einen WIMS-Java-Client und ruft unseren WIMS-Service auf Kybernethik 1 auf.
RPCDemo.java Ist die etwas mehr generischere Version und ermöglicht es jeglichen XML-RPC-Server in Second Life® aufzurufen.
avameo.jar Enthält die notwendigen XML-RPC-Klassen der Apache Foundation sowie die nachfolgenden Wrapper-Klassen von SLTalk & Partner

Die Sache mit dem CLASSPATH muss ich Euch ja nicht erklären ;-) Wenn ihr wissen wollt, wie man einen InWorld-XML-RPC-Server in SL mit LSL implementiert, dann empfehle ich Euch meinen TechTalk#4.

Über Andreas Mertens

Andreas Mertens aka Patrick Wunderland (SL) ist Initiator von avameo und schreibt seit 2006 für diesen Blog.

Trackbacks

  1. […] Avameo PRINT Aktuelles Heft Autoren Hörprobe Leseprobe Mediadaten 2007 Preise Downloads Java-API Tools SL-Toolbar Eclipse IDE Kontakt Avameo & Partner Investoren Impressum ——— […]

Ihre Meinung ist uns wichtig

*