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 10 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 69 def close_socket @server.close if @server unlink_socket_file end
handle_connection(socket)
click to toggle source
# File lib/eye/server.rb, line 24 def handle_connection(socket) text = socket.read begin # TODO, remove in 1.0 payload = Marshal.load(text) raise "unknown payload #{payload.inspect}" unless payload.is_a?(Array) cmd, *args = payload rescue # new format begin sign, msg_size = text[0...8].unpack('N*') raise "unknown protocol #{sign}" unless sign == Eye::Client::SIGN content = text[8..-1] content << socket.read(msg_size - content.length) while content.length < msg_size payload = Marshal.load(content) cmd = payload[:command] args = payload[:args] rescue => ex error "Failed to read from socket: #{ex.message}" return end end response = Eye::Control.command(cmd, *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 20 def run loop { async.handle_connection @server.accept } end
unlink_socket_file()
click to toggle source
# File lib/eye/server.rb, line 62 def unlink_socket_file File.delete(@socket_path) if @socket_path rescue end