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