2013-09-11 11:12:22 +02:00
|
|
|
require 'biju'
|
|
|
|
require 'logger'
|
|
|
|
|
2013-09-03 11:15:51 +02:00
|
|
|
module SMSd
|
|
|
|
class CLI
|
2013-09-11 11:12:22 +02:00
|
|
|
attr_accessor :machine
|
|
|
|
attr_reader :modem, :options, :logger
|
|
|
|
|
|
|
|
def initialize(args = [], &block)
|
|
|
|
@options = Options.parse(args)
|
|
|
|
|
|
|
|
self.machine = yield block if block_given?
|
|
|
|
|
|
|
|
init_logger
|
|
|
|
@modem = Biju::Hayes.new(options[:modem], pin: options[:pin])
|
|
|
|
end
|
2013-09-03 11:15:51 +02:00
|
|
|
|
2013-09-11 11:12:22 +02:00
|
|
|
def run
|
|
|
|
catch_signals
|
|
|
|
Process.daemon if options[:daemonize]
|
2013-09-03 11:15:51 +02:00
|
|
|
|
2013-09-11 11:12:22 +02:00
|
|
|
loop do
|
|
|
|
break if @terminate
|
2013-09-03 11:15:51 +02:00
|
|
|
|
2013-09-11 11:12:22 +02:00
|
|
|
modem.messages.each do |sms|
|
|
|
|
handle_message sms
|
|
|
|
end
|
2013-09-03 11:15:51 +02:00
|
|
|
|
2013-09-11 11:12:22 +02:00
|
|
|
sleep 5
|
|
|
|
end
|
|
|
|
modem.modem.close
|
2013-09-03 11:15:51 +02:00
|
|
|
end
|
|
|
|
|
2013-09-11 11:12:22 +02:00
|
|
|
private
|
|
|
|
|
|
|
|
def init_logger
|
|
|
|
@logger = Logger.new(
|
|
|
|
Util::MultiIO.new(STDOUT, File.open('debug.log', 'a')))
|
2013-09-03 11:15:51 +02:00
|
|
|
|
2013-09-11 11:12:22 +02:00
|
|
|
logger.formatter = proc do |severity, datetime, progrname, msg|
|
|
|
|
"#{datetime} [#{severity}] #{msg}\n"
|
2013-09-03 11:15:51 +02:00
|
|
|
end
|
|
|
|
end
|
2013-09-11 11:12:22 +02:00
|
|
|
|
|
|
|
def catch_signals
|
|
|
|
signal_term = proc { @terminate = true }
|
|
|
|
Signal.trap('SIGTERM', signal_term)
|
|
|
|
Signal.trap('SIGINT', signal_term)
|
|
|
|
end
|
|
|
|
|
|
|
|
def handle_message(sms)
|
|
|
|
if sms.valid?
|
|
|
|
send_answer(sms)
|
|
|
|
else
|
|
|
|
logger.warn "#{sms}: #{sms.errors.join(',')}"
|
|
|
|
end
|
|
|
|
modem.delete(sms.id)
|
|
|
|
end
|
|
|
|
|
|
|
|
def send_answer(sms)
|
|
|
|
message = machine.execute(sms.phone_number, nil, sms.message)
|
|
|
|
|
|
|
|
if message.nil? || message == ''
|
|
|
|
log = 'Empty answer'
|
|
|
|
else
|
|
|
|
modem.send(Biju::Sms.new(
|
|
|
|
phone_number: sms.phone_number, message: message))
|
|
|
|
log = message
|
|
|
|
end
|
|
|
|
|
|
|
|
logger.info "#{sms}: #{log}"
|
|
|
|
end
|
2013-09-03 11:15:51 +02:00
|
|
|
end
|
|
|
|
end
|