class Rpush::Daemon::Rpc::Server

Public Class Methods

start() click to toggle source
# File lib/rpush/daemon/rpc/server.rb, line 12
def self.start
  instance.start
end
stop() click to toggle source
# File lib/rpush/daemon/rpc/server.rb, line 16
def self.stop
  instance.stop
end

Public Instance Methods

start() click to toggle source
# File lib/rpush/daemon/rpc/server.rb, line 20
def start
  @stop = false

  @thread = Thread.new(UNIXServer.open(Rpc.socket_path)) do |server|
    begin
      loop do
        socket = server.accept
        break if @stop
        read_loop(socket)
      end

      server.close
    rescue StandardError => e
      log_error(e)
    ensure
      File.unlink(Rpc.socket_path) if File.exist?(Rpc.socket_path)
    end
  end
end
stop() click to toggle source
# File lib/rpush/daemon/rpc/server.rb, line 40
def stop
  @stop = true
  UNIXSocket.new(Rpc.socket_path)
  @thread.join if @thread
rescue StandardError => e
  log_error(e)
end

Private Instance Methods

process(cmd, args) click to toggle source
# File lib/rpush/daemon/rpc/server.rb, line 69
def process(cmd, args) # rubocop:disable Lint/UnusedMethodArgument
  case cmd
  when 'status'
    status
  end
end
read_loop(socket) click to toggle source
# File lib/rpush/daemon/rpc/server.rb, line 50
def read_loop(socket)
  loop do
    line = socket.gets
    break unless line

    begin
      cmd, args = JSON.load(line)
      log_debug("[rpc:server] #{cmd.to_sym.inspect}, args: #{args.inspect}")
      response = process(cmd, args)
      socket.puts(JSON.dump(response))
    rescue StandardError => e
      log_error(e)
      reflect(:error, e)
    end
  end

  socket.close
end
status() click to toggle source
# File lib/rpush/daemon/rpc/server.rb, line 76
def status
  Rpush::Daemon::AppRunner.status
end