May 25, 2009
Me and alka wrote a web application in ruby which serves as an interface to rtorrent. It has been written in ruby using the ramaze and sequel frameworks. It
is currently tested on debian stable with mostly apt-get installed gems,
for more info check the README file included (the only one external to
the distribution should be the xmlrpc gem which is on another post in
this blog).
It supports authentication and accesses rtorrent through the unix socket
interface, allowing to run the server as a user process.
An internal copy of the information from rtorrent is stored in a
in-memory sqlite database (maybe it can be totaly avoided, but that was how we planned it in the beggining) to avoid to access too much times to rtorrent
along with the caching of pages in ramaze.
Currently may lack some feature, but it’s doing it’s job, the main
missing feature is the user interface. If someone can write a
CSS and maybe do some cleanup in the interface any help would be
appreciated.
As usual in the code page everything can be found or directly here
git://github.com/mellon85/rtorrent-wrb.git
It is currently no more developed as we switched torrent client. Patches or comment are welcomed
Leave a Comment » |
Posts, Ruby, Script | Tagged: gem, rpc, rtorrent, Ruby, socket, unix |
Permalink
Posted by Dario Meloni
June 26, 2008
I have just published on rubyforge the gem for my xmlrpc modifications.
It’s called xmlrpcs and contains the class discussed in the previous post.
xmlrpcs Rubyforge homepage
Online RDoc
The changes are that now it has full rdoc comments and the path to include it is ‘xmlrpc/xmlrpcs’
I would like to relase my upnp binding as a gem too, but that will come later.
To install it just do
gem install xmlrpcs
and it’s done
Leave a Comment » |
Ruby | Tagged: gem, rpc, Ruby, rubyforge, socket, xml |
Permalink
Posted by Dario Meloni
June 25, 2008
[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 new_socket.
To avoid to close the socket at each request, which may be not the right choice for every code, you can redefine the do_rpc
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]
2 Comments |
Ruby | Tagged: local domain, rpc, Ruby, socket, unix, xml |
Permalink
Posted by Dario Meloni