class Rpush::Daemon::Dispatcher::ApnsHttp2

Constants

DEFAULT_TIMEOUT
URLS

Public Class Methods

new(app, delivery_class, _options = {}) click to toggle source
# File lib/rpush/daemon/dispatcher/apns_http2.rb, line 16
def initialize(app, delivery_class, _options = {})
  @app = app
  @delivery_class = delivery_class

  @client = create_http2_client(app)
end

Public Instance Methods

cleanup() click to toggle source
# File lib/rpush/daemon/dispatcher/apns_http2.rb, line 27
def cleanup
  @client.close
end
dispatch(payload) click to toggle source
# File lib/rpush/daemon/dispatcher/apns_http2.rb, line 23
def dispatch(payload)
  @delivery_class.new(@app, @client, payload.batch).perform
end

Private Instance Methods

create_http2_client(app) click to toggle source
# File lib/rpush/daemon/dispatcher/apns_http2.rb, line 33
def create_http2_client(app)
  url = URLS[app.environment.to_sym]
  client = NetHttp2::Client.new(url, ssl_context: prepare_ssl_context, connect_timeout: DEFAULT_TIMEOUT)
  client.on(:error) do |error|
    log_error(error)
    reflect(:error, error)
  end
  client
end
prepare_ssl_context() click to toggle source
# File lib/rpush/daemon/dispatcher/apns_http2.rb, line 43
def prepare_ssl_context
  @ssl_context ||= begin
    ctx = OpenSSL::SSL::SSLContext.new
    begin
      p12      = OpenSSL::PKCS12.new(@app.certificate, @app.password)
      ctx.key  = p12.key
      ctx.cert = p12.certificate
    rescue OpenSSL::PKCS12::PKCS12Error
      ctx.key  = OpenSSL::PKey::RSA.new(@app.certificate, @app.password)
      ctx.cert = OpenSSL::X509::Certificate.new(@app.certificate)
    end
    ctx
  end
end