偽 Ircv
http://lab.lowreal.net/trac/browser/c/mac/iicv.rb
いろいろ変えた。DRb のフロントオブジェクトである proc は write メソッド共通にしたので
class OutIO < IO
def initialize(write_proc)
@proc = write_proc
end
def write(arg)
@proc.call(arg)
end
end
$stdout = OutIO.new(DRb.new_with_uri(uri))とかもできるはず。あとステータスアイテムを出すようにしたりとか、いろいろ変更した。
DRb クライアント側も
require 'drb/drb'
require "rice/irc"
require "rice/observer"
class Ircv < RICE::SimpleClient
def initialize(uri, nick, user, username, pass, *channels)
super(nick, user, username, pass, *channels)
@o = DRbObject.new_with_uri(uri)
end
def uped(subject, message)
super
end
def message(subject, message)
_, nick, user, host = */(.*?)!(.*?)@(.*?)/.match(message.prefix)
case message
when RICE::Command::PRIVMSG
line = "%s %s %s¥n" % [message.params[0], nick, message.params[1]]
@o.call(line)
when RICE::Command::NOTICE
line = "%s %s %s¥n" % [message.params[0], nick, message.params[1]]
@o.call(line)
else
type = "#{message.class.to_s.sub(/^.*::/o, '').downcase}"
line = "%s %s %s¥n" % [type, nick, message.params.join(' ')]
@o.call(line)
end
end
def downed(subject, message)
super
end
end
o = Ircv.new("druby://localhost:9876", "ircv", "ircv", "ircv", "password")
c = RICE::Connection.new('host', 6667)
c.add_observer(o)
begin
c.start
rescue RICE::Connection::Closed
puts 'closed'
sleep 30
retry
endみたいしてちょっと読みやすいようにした。