lib/resque_aps/feedback.rb in resque-aps-0.9.9 vs lib/resque_aps/feedback.rb in resque-aps-0.9.10

- old
+ new

@@ -1,92 +1,92 @@ require 'timeout' module Resque module Plugins module Aps - class Feedback - include Resque::Plugins::Aps::Helper - extend Resque::Plugins::Aps::Helper + class Feedback + include Resque::Plugins::Aps::Helper + extend Resque::Plugins::Aps::Helper - @queue = "apple_push_service" + @queue = "apple_push_service" - attr_accessor :application_name, :device_token, :received_at + attr_accessor :application_name, :device_token, :received_at - def initialize(attributes) - attributes.each do |k, v| - respond_to?(:"#{k}=") ? send(:"#{k}=", v) : raise(Resque::Plugins::Aps::UnknownAttributeError, "unknown attribute: #{k}") - end - end + def initialize(attributes) + attributes.each do |k, v| + respond_to?(:"#{k}=") ? send(:"#{k}=", v) : raise(Resque::Plugins::Aps::UnknownAttributeError, "unknown attribute: #{k}") + end + end - def inspect - "#<#{self.class.name} #{application_name.inspect}, #{device_token.inspect}, #{received_at.inspect}>" - end + def inspect + "#<#{self.class.name} #{application_name.inspect}, #{device_token.inspect}, #{received_at.inspect}>" + end - def to_s - "#{application_name} #{received_at} #{device_token}" - end + def to_s + "#{application_name} #{received_at} #{device_token}" + end - def to_hash - {:application_name => application_name, :device_token => device_token, :received_at => received_at} - end + def to_hash + {:application_name => application_name, :device_token => device_token, :received_at => received_at} + end - def self.read_feedback(ssl_socket, application_name, product_id) - data_str = ssl_socket.read(4) - return nil unless data_str - data_ary = data_str.unpack('N') - return nil unless data_ary && data_ary[0] - time = Time.at(data_ary[0]) + def self.read_feedback(ssl_socket, application_name, product_id) + data_str = ssl_socket.read(4) + return nil unless data_str + data_ary = data_str.unpack('N') + return nil unless data_ary && data_ary[0] + time = Time.at(data_ary[0]) - data_str = ssl_socket.read(2) - return nil unless data_str - data_ary = data_str.unpack('n') - return nil unless data_ary && data_ary[0] - tl = data_ary[0] + data_str = ssl_socket.read(2) + return nil unless data_str + data_ary = data_str.unpack('n') + return nil unless data_ary && data_ary[0] + tl = data_ary[0] - data_str = ssl_socket.read(tl) - return nil unless data_str - data_ary = data_str.unpack('H*') - return nil unless data_ary && data_ary[0] - token = data_ary[0] + data_str = ssl_socket.read(tl) + return nil unless data_str + data_ary = data_str.unpack('H*') + return nil unless data_ary && data_ary[0] + token = data_ary[0] - feedback = Feedback.new({:received_at => time, :device_token => token, :application_name => application_name}) - return feedback - end + feedback = Feedback.new({:received_at => time, :device_token => token, :application_name => application_name}) + return feedback + end - # - # Perform a Feedback check on the APN server, for the given app key (which must be the first argument) - # - def self.perform(*args) - app_name = args[0] - start = Time.now - count = 0 - appl = Resque.aps_application(app_name) + # + # Perform a Feedback check on the APN server, for the given app key (which must be the first argument) + # + def self.perform(*args) + app_name = args[0] + start = Time.now + count = 0 + appl = Resque.aps_application(app_name) - return unless appl + return unless appl - appl.socket(nil, nil, Resque.aps_feedback_host, Resque.aps_feedback_port) do |socket, app| - begin - logger.debug("Feedback: Reading feedbacks for #{app_name}.") if logger - timeout(5) do - until socket.eof? - app.before_aps_read - feedback = read_feedback(socket, app_name, product_id) - if feedback - count += 1 - app.after_app_read(feedback) - else - app.aps_read_failed + appl.socket(nil, nil, Resque.aps_feedback_host, Resque.aps_feedback_port) do |socket, app| + begin + logger.debug("Feedback: Reading feedbacks for #{app_name}.") if logger + timeout(5) do + until socket.eof? + app.before_aps_read + feedback = read_feedback(socket, app_name, product_id) + if feedback + count += 1 + app.after_aps_read(feedback) + else + app.aps_read_failed + end + end end + rescue + logger.error Application.application_exception($!, app_name) if logger + app.aps_read_error(Application.application_exception($!, app_name)) end end - rescue - logger.error Application.application_exception($!, app_name) if logger - app.aps_read_error(Application.application_exception($!, app_name)) + logger.info("Read #{count} #{app_name} feedbacks over #{Time.now - start} sec.") if logger end + end - logger.info("Read #{count} #{app_name} feedbacks over #{Time.now - start} sec.") if logger end - end - end -end end \ No newline at end of file