module Rpush::Daemon

Constants

HTTP_STATUS_CODES

Attributes

store[RW]

Public Class Methods

common_init() click to toggle source
# File lib/rpush/daemon.rb, line 117
def self.common_init
  init_store
  init_plugins
end
daemonize?() click to toggle source
# File lib/rpush/daemon.rb, line 144
def self.daemonize?
  !(Rpush.config.push || Rpush.config.foreground || Rpush.config.embedded || Rpush.jruby?)
end
delete_pid_file() click to toggle source
# File lib/rpush/daemon.rb, line 159
def self.delete_pid_file
  pid_file = Rpush.config.pid_file
  File.delete(pid_file) if !pid_file.blank? && File.exist?(pid_file)
end
init_plugins() click to toggle source
# File lib/rpush/daemon.rb, line 137
def self.init_plugins
  Rpush.plugins.each do |name, plugin|
    plugin.init_block.call
    Rpush.logger.info("[plugin:#{name}] Loaded.")
  end
end
init_store() click to toggle source
# File lib/rpush/daemon.rb, line 124
def self.init_store
  return if store
  begin
    name = Rpush.config.client.to_s
    require "rpush/daemon/store/#{name}"
    self.store = Rpush::Daemon::Store.const_get(name.camelcase).new
  rescue StandardError, LoadError => e
    Rpush.logger.error("Failed to load '#{Rpush.config.client}' storage backend.")
    Rpush.logger.error(e)
    exit 1
  end
end
show_welcome_if_needed() click to toggle source
# File lib/rpush/daemon.rb, line 164
    def self.show_welcome_if_needed
      if Rpush::Daemon::AppRunner.app_ids.count == 0
        puts <<-EOS

* #{Rainbow('Is this your first time using Rpush?').green}
  You need to create an App before you can start using Rpush.
  Please refer to the documentation at https://github.com/rpush/rpush

        EOS
      end
    end
shutdown() click to toggle source
# File lib/rpush/daemon.rb, line 95
def self.shutdown
  if Rpush.config.foreground
    # Eat the '^C'
    STDOUT.write("\b\b")
    STDOUT.flush
  end

  Rpush.logger.info('Shutting down... ', true)

  shutdown_lock.synchronize do
    Rpc::Server.stop
    Feeder.stop
    AppRunner.stop
    delete_pid_file
    puts Rainbow('✔').red if Rpush.config.foreground && Rpush.config.foreground_logging
  end
end
shutdown_lock() click to toggle source
# File lib/rpush/daemon.rb, line 113
def self.shutdown_lock
  @shutdown_lock ||= Mutex.new
end
start() click to toggle source
# File lib/rpush/daemon.rb, line 74
def self.start
  Process.daemon if daemonize?
  write_pid_file
  SignalHandler.start
  common_init
  Synchronizer.sync
  Rpc::Server.start

  # No further store connections will be made from this thread.
  store.release_connection

  Rpush.logger.info('Rpush operational.')
  show_welcome_if_needed

  # Blocking call, returns after Feeder.stop is called from another thread.
  Feeder.start

  # Wait for shutdown to complete.
  shutdown_lock.synchronize { true }
end
write_pid_file() click to toggle source
# File lib/rpush/daemon.rb, line 148
def self.write_pid_file
  unless Rpush.config.pid_file.blank?
    begin
      FileUtils.mkdir_p(File.dirname(Rpush.config.pid_file))
      File.open(Rpush.config.pid_file, 'w') { |f| f.puts Process.pid }
    rescue SystemCallError => e
      Rpush.logger.error("Failed to write PID to '#{Rpush.config.pid_file}': #{e.inspect}")
    end
  end
end