class Geary::Performer
Public Class Methods
new(address)
click to toggle source
# File lib/geary/performer.rb, line 15 def initialize(address) @address = address configure_connection Gearman::Worker.method(:new_link) end
Public Instance Methods
build_connection()
click to toggle source
# File lib/geary/performer.rb, line 63 def build_connection @gearman = @connect.call(@address) end
configure_connection(connection_routine)
click to toggle source
# File lib/geary/performer.rb, line 67 def configure_connection(connection_routine) @connect = connection_routine reconnect(current_actor, nil) end
disconnect()
click to toggle source
# File lib/geary/performer.rb, line 52 def disconnect if @gearman @gearman.terminate if @gearman.alive? end end
perform(packet)
click to toggle source
# File lib/geary/performer.rb, line 37 def perform(packet) job = JSON.parse(packet.data) job_result = nil begin worker = ::Object.const_get(job['class']).new job_result = worker.perform(*job['args']) rescue => error @gearman.async.work_exception(packet.handle, error.message) else @gearman.async.work_complete(packet.handle, job_result) end end
reconnect(actor, reason)
click to toggle source
# File lib/geary/performer.rb, line 58 def reconnect(actor, reason) disconnect build_connection end
start()
click to toggle source
# File lib/geary/performer.rb, line 20 def start @gearman.can_do('Geary.default') loop do packet = @gearman.grab_job case packet when Gearman::Packet::JOB_ASSIGN perform(packet) when Gearman::Packet::NO_JOB @gearman.pre_sleep else break end end end