class GemeraldBeanstalk::Connection
Constants
- BEGIN_REQUEST_STATES
Attributes
beanstalk[R]
mutex[R]
producer[W]
tube_used[R]
tubes_watched[R]
waiting[W]
worker[W]
Public Class Methods
new(beanstalk, connection = nil)
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 78 def initialize(beanstalk, connection = nil) @beanstalk = beanstalk @connection = connection @inbound_state = :ready @mutex = Mutex.new @outbound_state = :ready @tube_used = 'default' @tubes_watched = Set.new(%w[default]) end
Public Instance Methods
alive?()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 9 def alive? return @inbound_state != :closed && @oubound_state != :closed end
begin_multi_part_request(multi_part_request)
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 14 def begin_multi_part_request(multi_part_request) return false unless outbound_ready? @multi_part_request = multi_part_request @outbound_state = :multi_part_request_in_progress return true end
begin_request()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 22 def begin_request return false unless BEGIN_REQUEST_STATES.include?(@outbound_state) @outbound_state = :request_in_progress return true end
close_connection()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 29 def close_connection @inbound_state = @outbound_state = :closed @connection.close_connection unless @connection.nil? end
complete_request()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 35 def complete_request return false unless request_in_progress? @outbound_state = :ready return true end
execute(raw_command)
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 42 def execute(raw_command) command = response = nil @mutex.synchronize do return if waiting? || request_in_progress? puts "#{Time.now.to_f}: #{raw_command}" if ENV['VERBOSE'] if multi_part_request_in_progress? (command = @multi_part_request).body = raw_command else command = GemeraldBeanstalk::Command.new(raw_command, self) if !command.valid? response = command.error elsif command.multi_part_request? return begin_multi_part_request(command) end end begin_request end puts "#{Time.now.to_f}: #{command.inspect}" if ENV['VERBOSE'] # Execute command unless parsing already yielded a response response ||= beanstalk.execute(command) transmit(response) unless response.nil? end
ignore(tube, force = false)
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 66 def ignore(tube, force = false) return nil unless @tubes_watched.length > 1 || force @tubes_watched.delete(tube) return @tubes_watched.length end
inbound_ready?()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 73 def inbound_ready? return @inbound_state == :ready end
multi_part_request_in_progress?()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 89 def multi_part_request_in_progress? return @outbound_state == :multi_part_request_in_progress end
outbound_ready?()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 94 def outbound_ready? return @outbound_state == :ready end
producer?()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 99 def producer? return !!@producer end
request_in_progress?()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 104 def request_in_progress? return @outbound_state == :request_in_progress end
response_received()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 109 def response_received return false unless waiting? || timed_out? @inbound_state = :ready return true end
timed_out?()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 116 def timed_out? return @inbound_state == :timed_out end
transmit(message)
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 121 def transmit(message) return if !alive? || @connection.nil? puts "#{Time.now.to_f}: #{message}" if ENV['VERBOSE'] @connection.send_data(message) complete_request response_received return self end
use(tube_name)
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 131 def use(tube_name) @tube_used = tube_name end
wait(timeout = nil)
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 136 def wait(timeout = nil) return false unless inbound_ready? @wait_timeout = timeout @inbound_state = :waiting return true end
wait_timed_out()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 144 def wait_timed_out return false unless @inbound_state == :waiting @wait_timeout = nil @inbound_state = :timed_out return true end
waiting?()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 152 def waiting? return false unless @inbound_state == :waiting return true if @wait_timeout.nil? || @wait_timeout > Time.now.to_f wait_timed_out return false end
watch(tube)
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 160 def watch(tube) @tubes_watched << tube return @tubes_watched.length end
worker?()
click to toggle source
# File lib/gemerald_beanstalk/connection.rb, line 166 def worker? return !!@worker end