Sha256: c249ce505de2d87ad9c50ae230f4de6925395813bd8ecfc5d73b337bfc6111dc

Contents?: true

Size: 1.04 KB

Versions: 10

Compression:

Stored size: 1.04 KB

Contents

require 'celluloid/io'
require 'celluloid/autostart'

class Eye::Server
  include Celluloid::IO

  attr_reader :socket_path, :server

  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

  def run
    loop { async.handle_connection @server.accept }
  end

  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

  def command(cmd, *args)
    Eye::Control.command(cmd, *args)
  end

  def unlink_socket_file
    File.delete(@socket_path) if @socket_path
  rescue
  end

  finalizer :close_socket

  def close_socket
    @server.close if @server
    unlink_socket_file
  end

end

Version data entries

10 entries across 10 versions & 3 rubygems

Version Path
ace-eye-0.6.5 lib/eye/server.rb
ace-eye-0.6.4 lib/eye/server.rb
eye-0.6.1 lib/eye/server.rb
ace-eye-0.6.3 lib/eye/server.rb
ace-eye-0.6.2 lib/eye/server.rb
ace-eye-0.6.1 lib/eye/server.rb
eye-0.6 lib/eye/server.rb
reel-eye-0.5.2.1 lib/eye/server.rb
reel-eye-0.5.2 lib/eye/server.rb
eye-0.5.2 lib/eye/server.rb