1# 2# dbiff.rb - distributed cdbiff (server) 3# * original: cdbiff by Satoru Takabayashi <http://namazu.org/~satoru/cdbiff> 4 5require 'drb/drb' 6require 'drb/eq' 7require 'drb/observer' 8 9class Biff 10 include DRb::DRbObservable 11 12 def initialize(filename, interval) 13 super() 14 @filename = filename 15 @interval = interval 16 end 17 18 def run 19 last = Time.now 20 while true 21 begin 22 sleep(@interval) 23 current = File::mtime(@filename) 24 if current > last 25 changed 26 begin 27 notify_observers(@filename, current) 28 rescue Error 29 end 30 last = current 31 end 32 rescue 33 next 34 end 35 end 36 end 37end 38 39def main 40 filename = "/var/mail/#{ENV['USER']}" 41 interval = 15 42 uri = 'druby://:19903' 43 44 biff = Biff.new(filename, interval) 45 46 DRb.start_service(uri, biff) 47 biff.run 48end 49 50main 51 52