Sha256: 6b5018244c0dca9e48c0a6333437818b00856b1ba32635e73355dc8bed7a3b6a

Contents?: true

Size: 1.85 KB

Versions: 2

Compression:

Stored size: 1.85 KB

Contents

module Firetower
  class Server
    attr_reader :session, :log_path, :pid_path

    def initialize(session, options={})
      @session  = session
      @log_path = Pathname(options.fetch(:log_path))
      @pid_path = Pathname(options.fetch(:pid_path))
      @logger   = options.fetch(:logger) {
        ::Logger.new(@log_path, 4, 1024000)
      }
    end

    def run
      trap('INT') do
        @logger.info "Received INT; shutting down."
        EventMachine.stop_event_loop
        @pid_path.unlink if @pid_path.exist?
      end
      EventMachine::run do
        @logger.info "Firetower is starting up"
        open(@pid_path, 'w+') do |pid_file|
          pid_file.puts $$
        end
        @session.subscribed_rooms.each do |room|
          subscribe_to_room(room)
        end
      end
      @logger.info "Finished processing events; closing session"
      session.close!
      @logger.info "Session closed"
    end

    def subscribe_to_room(room)
      @logger.info "Subscribing to #{room}"

      room.account.join!(room.name)

      stream = Twitter::JSONStream.connect(
        :path => "/room/#{room.id}/live.json",
        :host => 'streaming.campfirenow.com',
        :auth => "#{room.account.token}:x")

      stream.each_item do |json|
        @logger.info "Processing event:\n  #{json}"

        event = Firetower::Event.parse(json)
        event.room = room

        session.execute_hook(:receive, session, event)
      end

      stream.on_error do |message|
        error = RuntimeError.new(message)
        @logger.error error.message
        session.execute_hook(:error, error)
      end

      stream.on_max_reconnects do |timeout, retries|
        @logger.error "Unable to connect after #{retries} attempts"
        session.execute_hook(:error, session,
          "Unable to connect after #{retries} attempts")
        stop_event_loop
      end
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
firetower-0.1.1 lib/firetower/server.rb
firetower-0.1.0 lib/firetower/server.rb