[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[mhc:01232] Re: アラーム
大原です。
From: Yoshinari Nomura <nom@xxxxxxxxxxxxxxxxxxx>
Subject: [mhc:01229] アラーム (Re: i-mhc)
Message-ID: <20010201004307X.nom@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 01 Feb 2001 00:43:07 +0900
> えおっしゃる通りです。「任意のコマンド」 をどう記述するかが
> 問題ですね。HP200LX みたいに "| hoge" とかできるようにすると、
> ちょっと危ないですしね。記事毎に変えられなくてもいいのなら、
> 割と簡単だと思います。どう書けばいいでしょう?
例えば、こんなのはどうでしょう?
新しいコマンドが欲しければ、それに合わせて新しい class を作っておき、
実際に使う際には、必要なコマンドを選んで Procs に追加していく、
という感じです。
外部コマンドを起動するにしても、date や sch の引数引き渡しのために、
結局は、各コマンドに合わせて wrapper を書かないとダメそうなので、
いっそのこと、class でくるんでやった方が良いような気がします。
----
OHARA Shigeki (大原 重樹) <os@xxxxxxxxx>
#!/usr/local/bin/ruby
# -*- Ruby -*-
require 'mhc-schedule'
module MHC
module Alarm
module Proc
class Mail
def initialize(to, from = nil, smtp = 'localhost', helo = 'localhost')
require 'net/smtp'
@to = to
@from = (from || to)
@smtp_host, @helo_host = smtp, helo
end
def run(date, sch)
header = "To: #{@to}\n"
header += "From: secretary-of-#{@to}\n"
header += "Subject: #{sch.subject}\n"
header += "\n"
body = "#{date.to_js}\n"
body += " #{sch.time_b}\n"
body += " #{sch.subject}\n"
unless $debug
message = header + MhcKconv::tomail(body)
Net::SMTPSession .start(@smtp_host, 25, @helo_host) { |server|
server .sendmail(message, @to, [@to])
}
else
print MhcKconv::todisp(header + body)
end
end
end
class Echo
def initialize()
end
def run(date, sch)
puts sch.subject
end
end
end
end
end
Procs = [
MHC::Alarm::Proc::Mail::new('user@xxxxxxxxxxxxx'),
MHC::Alarm::Proc::Echo::new,
]
db = MhcScheduleDB .new
alarm = MhcAlarm .new(db)
alarm .signal_connect('time-arrived'){|date, sch|
Procs.each { |proc|
proc.run(date, sch)
}
}
alarm .check
sleep