[Continues: Ruby xml-talking to rtorrent]
I have rewritten how i changed the socket in XMLRPC are modified in a more Ruby style way.
A new class, in XMLRPC module, called ClientS (in a file called xmlrpcs.rb). It is a subclass of the Client class to ease the implementation of other kind of trasport system if the Net::HTTP based one doesn’t fit your needs.
require 'xmlrpc/client' class XMLRPC::ClientS < XMLRPC::Client def initialize(info) @info = info end private # create new socket def new_socket(info,async) raise "Must be subclassed" end # write xmlrpc request in the previously created socket def write_request(socket,request) if socket.write(request) != request.length then raise "Not all the data has been sent" end end # read response from the socket def read_response(socket) socket.read() end # do_rpc working with custom sockets def do_rpc( request, async ) sock = new_socket(@info,async) write_request(sock,request) return read_response(sock) end end end
This makes it very simple to extend the class by just subclassing ClientS or just redefining the function
To avoid to close the socket at each request, which may be not the right choice for every code, you can redefine the
The info field is used to pass some arguments to create the socket, for instance
require 'xmlrpcs' require 'socket' class XMLClient < XMLRPC::ClientS def new_socket( info, async ) UNIXSocket.new(info) end end c=XMLClient.new("/path/to/sock") c.call(..)
The code can be found in the code page
[Continued by: XMLRPCs gem published]