Sha256: a62e48b66d0b669770e2f3cae6eb2b9b2337e5b70accc7a752cac2884f9be315

Contents?: true

Size: 870 Bytes

Versions: 10

Compression:

Stored size: 870 Bytes

Contents

require 'socket'
require 'timeout'

class Eye::Client

  attr_reader :socket_path

  def initialize(socket_path, type = :old)
    @socket_path = socket_path
    @type = type
  end

  SIGN = 123_566_983

  def execute(h = {})
    payload = if @type == :old
      Marshal.dump([h[:command], *h[:args]]) # TODO: remove in 1.0
    else
      payload = Marshal.dump(h)
      [SIGN, payload.length].pack('N*') + payload
    end
    timeout = h[:timeout] || Eye::Local.client_timeout
    attempt_command(payload, timeout)
  end

private

  def attempt_command(payload, timeout)
    Timeout.timeout(timeout) { send_request(payload) }
  rescue Timeout::Error, EOFError
    :timeouted
  end

  def send_request(pack)
    UNIXSocket.open(@socket_path) do |socket|
      socket.write(pack)
      data = socket.read
      Marshal.load(data) rescue :corrupted_data
    end
  end

end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
eye-0.10.1.pre lib/eye/client.rb
eye-0.10.0 lib/eye/client.rb
eye-0.10.0.alpha2 lib/eye/client.rb
eye-0.10.0.alpha lib/eye/client.rb
eye-0.9.4.nosigar lib/eye/client.rb
eye-0.9.4 lib/eye/client.rb
eye-0.9.3 lib/eye/client.rb
eye-0.9.2.nosigar lib/eye/client.rb
eye-0.9.2 lib/eye/client.rb
eye-0.9.1 lib/eye/client.rb