Service web rails pour Second Life (1/2)
By jul on Wednesday, June 13 2007, 18:33 - Permalink
Dans cette première partie, nous verrons comment communiquer avec un objet in-world depuis une application ruby on rails grâce à XML-RPC. Pour commencer on définit une structure second life (app/models/second_life_struct.rb) qui représentera le format de l'api second life :
class SecondLifeStruct < ActionWebService::Struct member "Channel", :string member "StringValue", :string member "IntValue", :int end
Ensuite, on créé une nouvelle api (app/apis/second_life_api.rb) qui utilise cette structure:
class SecondLifeApi < ActionWebService::API::Base inflect_names false api_method "llRemoteData", :expects=>[SecondLifeStruct], :returns=>[SecondLifeStruct] end
Avant de continuer, intéressons nous rapidement au script LSL de l'objet qui permettra de recevoir la communication :
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 de communication : "+(string)channel);
}
if(type==REMOTE_DATA_REQUEST) {
llOwnerSay(sval);
llRemoteDataReply(channel,message_id,"Tout va bien",0);
}
}
}
Le canal de communication correspond à un identifiant unique permettant de communiquer par la suite avec cet objet depuis le service web de Linden. Il faudra copier cet identifiant pour pouvoir appeler notre page dans rails (/second_life/tester_objet?canal=identifiant).
Il ne reste plus qu'à définir le controlleur :
class SecondLifeController < ApplicationController
web_client_api :second_life, :xmlrpc, "http://xmlrpc.secondlife.com/cgi-bin/xmlrpc.cgi", :timeout=>90
def tester_objet
canal=params[:canal]
begin
resultat=second_life.llRemoteData(SecondLifeStruct.new("Channel"=>canal,"StringValue"=>"Bonjour tout le monde !","IntValue"=>"0"))
render :text=>resultat["StringValue"]
rescue
render :text=>"L'objet ne répond pas"
end
end
end
Et voila, lorsque l'on se connecte à la page, l'objet dans second life nous dira "Bonjour tout le monde !".
Comme on vient de le voir, le système de service web de ruby on rails permet d'interfacer facilement votre application à second life. Le prochain article montrera comment faire l'opération inverse : communiquer depuis un objet second life vers une application rails.
Pour plus d'information sur le format XML-RPC de second life, voir ici.
Comments
This post's comments feed