class Rpush::Daemon::Apns::FeedbackReceiver
Constants
- HOSTS
- TUPLE_BYTES
Public Class Methods
new(app)
click to toggle source
# File lib/rpush/daemon/apns/feedback_receiver.rb, line 17 def initialize(app) @app = app @host, @port = HOSTS[@app.environment.to_sym] @certificate = app.certificate @password = app.password @interruptible_sleep = InterruptibleSleep.new end
Public Instance Methods
check_for_feedback()
click to toggle source
# File lib/rpush/daemon/apns/feedback_receiver.rb, line 53 def check_for_feedback connection = nil begin connection = Rpush::Daemon::TcpConnection.new(@app, @host, @port) connection.connect tuple = connection.read(TUPLE_BYTES) while tuple timestamp, device_token = parse_tuple(tuple) create_feedback(timestamp, device_token) tuple = connection.read(TUPLE_BYTES) end rescue StandardError => e log_error(e) reflect(:error, e) ensure connection.close if connection end end
start()
click to toggle source
# File lib/rpush/daemon/apns/feedback_receiver.rb, line 25 def start return if Rpush.config.push Rpush.logger.info("[#{@app.name}] Starting feedback receiver... ", true) @thread = Thread.new do loop do break if @stop check_for_feedback @interruptible_sleep.sleep(Rpush.config.apns.feedback_receiver.frequency) end Rpush::Daemon.store.release_connection end puts ANSI.green { '✔' } if Rpush.config.foreground end
stop()
click to toggle source
# File lib/rpush/daemon/apns/feedback_receiver.rb, line 42 def stop @stop = true @interruptible_sleep.stop @thread.join if @thread rescue StandardError => e log_error(e) reflect(:error, e) ensure @thread = nil end
Protected Instance Methods
create_feedback(failed_at, device_token)
click to toggle source
# File lib/rpush/daemon/apns/feedback_receiver.rb, line 80 def create_feedback(failed_at, device_token) formatted_failed_at = failed_at.strftime('%Y-%m-%d %H:%M:%S UTC') log_info("[FeedbackReceiver] Delivery failed at #{formatted_failed_at} for #{device_token}.") feedback = Rpush::Daemon.store.create_apns_feedback(failed_at, device_token, @app) reflect(:apns_feedback, feedback) end
parse_tuple(tuple)
click to toggle source
# File lib/rpush/daemon/apns/feedback_receiver.rb, line 75 def parse_tuple(tuple) failed_at, _, device_token = tuple.unpack("N1n1H*") [Time.at(failed_at).utc, device_token] end