class Flowpi::Server
Attributes
logger[R]
Public Class Methods
new(options = {})
click to toggle source
# File lib/flowpi.rb, line 9 def initialize(options = {}) @options = options if @options[:log_file].nil? || @options[:log_file].empty? @logger = ::Logger.new(STDOUT) else @logger = ::Logger.new(@options[:log_file]) end @logger.level = ::Logger.const_get(@options.fetch(:log_level, 'WARN')) @logger.datetime_format = @options.fetch(:log_date_format, '%Y-%m-%d %H:%M:%S') trap "SIGINT" do exit 130 end end
Public Instance Methods
handle_line(line)
click to toggle source
# File lib/flowpi.rb, line 42 def handle_line(line) message = Flowpi::Message.new.parse(line) if message.has_content? if message.content.match(@options[:message_matcher]) logger.info { "Speaking message: #{message.content}" } %x(espeak "#{message.content}" --stdout 2>/dev/null | aplay -D 'default') else logger.debug { "Ignoring message: #{message.content}" } end end end
run()
click to toggle source
# File lib/flowpi.rb, line 24 def run logger.info "Starting Flowpi..." http = EM::HttpRequest.new( "https://stream.flowdock.com/flows?filter=#{@options[:filter]}", :keepalive => true, :connect_timeout => 0, :inactivity_timeout => 0) EventMachine.run do s = http.get(:head => { 'Authorization' => [@options[:token], ''], 'accept' => 'application/json'}) buffer = "" s.stream do |chunk| buffer << chunk while line = buffer.slice!(/.+\r\n/) handle_line(line) end end end end