Sha256: 7bd970646076a6a51b471fcc6282caabf1e9dcaaa61e435db303f10407397e4c

Contents?: true

Size: 1.5 KB

Versions: 1

Compression:

Stored size: 1.5 KB

Contents

require "eventmachine"
require "amqp/utilities/server_type"

module AMQP
  module Utilities
    class EventLoopHelper

      def self.eventmachine_thread
        @eventmachine_thread
      end # self.eventmachine_thread

      def self.reactor_running?
        EventMachine.reactor_running?
      end # self.reactor_running?

      def self.server_type
        @server_type ||= ServerType.detect
      end # self.server_type

      def self.run(in_a_worker_process = false)
        # TODO: make reentrant

        @eventmachine_thread  = case self.server_type
                                when :thin, :goliath, :evented_mongrel then
                                  Thread.current
                                when :unicorn, :passenger then
                                  EventMachine.stop if in_a_worker_process

                                  t = Thread.new { EventMachine.run }
                                  # give EventMachine reactor some time to start
                                  sleep(0.25)

                                  t
                                when :mongrel, :scgi, :webrick, nil then
                                  t = Thread.new { EventMachine.run }
                                  # give EventMachine reactor some time to start
                                  sleep(0.25)

                                  t
                                end
      end # self.run

      def self.stop
        EventMachine.stop
      end
    end # EventLoopHelper
  end # Utilities
end # AMQP

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
amqp-0.8.0.rc8 lib/amqp/utilities/event_loop_helper.rb