class ApnsKit::Client

Attributes

connection_pool[R]
default_topic[R]
pool_size[R]

Public Class Methods

development(certificate, pool_size: 1, heartbeat_interval: 60) click to toggle source
# File lib/apns_kit/client.rb, line 24
def development(certificate, pool_size: 1, heartbeat_interval: 60)
    client = self.new(APPLE_DEVELOPMENT_API_URI, certificate, pool_size: pool_size, heartbeat_interval: heartbeat_interval)
end
new(uri, certificate, pool_size: 1, heartbeat_interval: 60) click to toggle source
# File lib/apns_kit/client.rb, line 30
def initialize(uri, certificate, pool_size: 1, heartbeat_interval: 60)
    @pool_size = pool_size
    @connection_pool = @pool_size.times.map { ApnsKit::Connection.new(uri, certificate) }.freeze
    @default_topic = certificate.app_bundle_id
    if heartbeat_interval > 0
        ApnsKit.log_info("Setting up heartbeat checker")
        @heartbeat_checker = Concurrent::TimerTask.new { @connection_pool.each(&:ping) }
        @heartbeat_checker.execution_interval = heartbeat_interval
        @heartbeat_checker.execute
    end
end
production(certificate, pool_size: 1, heartbeat_interval: 60) click to toggle source
# File lib/apns_kit/client.rb, line 19
def production(certificate, pool_size: 1, heartbeat_interval: 60)
    client = self.new(APPLE_PRODUCTION_API_URI, certificate, pool_size: pool_size, heartbeat_interval: heartbeat_interval)
    client
end

Public Instance Methods

inspect() click to toggle source
# File lib/apns_kit/client.rb, line 74
def inspect
    "#<ApnsKit::Client:#{"0x00%x" % (object_id << 1)} #{to_s}>"
end
send(*notifications) click to toggle source
# File lib/apns_kit/client.rb, line 62
def send(*notifications)
    return [] if notifications.empty?
    notifications.flatten!
    notifications.each { |notification| notification.topic = default_topic if notification.topic.nil? }
    request = ApnsKit::Request.new(notifications)
    return Concurrent::Future.execute{ request.perform_blocking_send(connection_pool.sample) }.value
end
send_async(*notifications, &block) click to toggle source
# File lib/apns_kit/client.rb, line 48
def send_async(*notifications, &block)
    notifications.flatten!
    notifications.each { |notification| notification.topic = default_topic if notification.topic.nil? }
    request = ApnsKit::Request.new(notifications)

    if block
        Concurrent::Future.execute{ request.perform_nonblocking_send(connection_pool.sample, &block) }
    else
        Concurrent::Future.execute{ request.perform_nonblocking_send(connection_pool.sample) }
    end

    return true
end
shutdown() click to toggle source
# File lib/apns_kit/client.rb, line 42
def shutdown
    @heartbeat_checker.shutdown if @heartbeat_checker
    @connection_pool.each(&:close)
    return true
end
to_s() click to toggle source
# File lib/apns_kit/client.rb, line 70
def to_s
    "uri=#{connection_pool.first.uri} connected=#{connection_pool.map(&:connected)} pool_size=#{pool_size}"
end