class Eye::Server

Attributes

server[R]
socket_path[R]

Public Class Methods

new(socket_path) click to toggle source
# File lib/eye/server.rb, line 9
def initialize(socket_path)
  @socket_path = socket_path
  @server = begin
    UNIXServer.open(socket_path)
  rescue Errno::EADDRINUSE
    unlink_socket_file
    UNIXServer.open(socket_path)
  end
end

Public Instance Methods

close_socket() click to toggle source
# File lib/eye/server.rb, line 55
def close_socket
  @server.close if @server
  unlink_socket_file
end
command(cmd, *args) click to toggle source
# File lib/eye/server.rb, line 44
def command(cmd, *args)
  Eye::Control.command(cmd, *args)
end
handle_connection(socket) click to toggle source
# File lib/eye/server.rb, line 23
def handle_connection(socket)
  text = socket.read

  begin
    command, *args = Marshal.load(text)
  rescue => ex
    error "Failed to read from socket: #{ex.message}"
    return
  end

  response = command(command, *args)
  socket.write(Marshal.dump(response))

rescue Errno::EPIPE
  # client timeouted
  # do nothing

ensure
  socket.close
end
run() click to toggle source
# File lib/eye/server.rb, line 19
def run
  loop { async.handle_connection @server.accept }
end