lib/mail_room/coordinator.rb
module MailRoom
# Coordinate the mailbox watchers
# @author Tony Pitale
class Coordinator
attr_accessor :watchers, :running
# build watchers for a set of mailboxes
# @params mailboxes [Array<MailRoom::Mailbox>] mailboxes to be watched
def initialize(mailboxes)
self.watchers = []
mailboxes.each {|box| self.watchers << MailboxWatcher.new(box)}
end
alias :running? :running
# start each of the watchers to running
def run
watchers.each(&:run)
self.running = true
sleep_while_running
ensure
quit
end
# quit each of the watchers when we're done running
def quit
watchers.each(&:quit)
end
private
# @private
def sleep_while_running
# do we need to sweep for dead watchers?
# or do we let the mailbox rebuild connections
while(running?) do; sleep 1; end
end
end
end