URL:

  http://jabber-rpc.rubyforge.org

Changes:

  * Rudimentary handling of transport-level errors in remote calls.
  * Allow selection of XML parser in client.
  * Debug option and introspection for sample agent.
  * Smarter processing of method response in Client#call2.
  * Bugfix: test agent human input processor expected message instead of message body.
  * Now only message body is passed to human input processor.
  * Bugfix: results of human input processor were not interpreted correctly.
  * Fixed sample TodoAgent to work with new BasicServer.
  * BasicAgent is now BasicServer and inherites from XMLRPC::Server.
  Jabber::RPC::BasicServer gets from XMLRPC::Server all the goodies such
  as introspection, interfaces with explicit signatures, default
  handlers and proc handlers.  It also allows (potentially) exposure of
  multiple agents at a single JID, though it's probably not a good thing
  in the Jabber case (see README).

Description:

  Jabber-RPC lets objects talk over the network transparently.
  
  Unlike CORBA, objects can reside anywhere on the Internet (safely).
  
  Unlike XMLRPC and SOAP, they can reside in a LAN behind a firewall,
  communication is asynchronous (both parties can initiate
  conversation), and you don't need a web server.
    
Small example (assumes jabberd installed on local machine):

  ---- agent.rb ----

  require "jabber/rpc"

  class TestAgent
    INTERFACE = XMLRPC::interface("") {
      meth "boolean alive?()"
    }

    def alive?(from)
      true
    end
  end

  agent = TestAgent.new
  server = Jabber::RPC::BasicServer.new("bot@localhost/TestAgent", "password")
  server.add_handler(TestAgent::INTERFACE, agent)
  server.serve

  Thread.stop

  ---- irb ----

  require "jabber/rpc"
  session = Jabber::Session.bind("user@localhost/Ruby", "password")
  agent = Jabber::RPC::Client.new(session, "bot@localhost/TestAgent").proxy3
  agent.alive?  #=>  true