class Invoker::Reactor::Reader
Attributes
read_array[RW]
Public Class Methods
new()
click to toggle source
# File lib/invoker/reactor/reader.rb, line 5 def initialize @read_array = [] end
Public Instance Methods
handle_read_event(read_ready_fds)
click to toggle source
# File lib/invoker/reactor/reader.rb, line 13 def handle_read_event(read_ready_fds) ready_fds = read_ready_fds.flatten.compact ready_fds.each { |ready_fd| process_read(ready_fd) } end
watch_for_read(socket)
click to toggle source
# File lib/invoker/reactor/reader.rb, line 9 def watch_for_read(socket) @read_array << socket end
Private Instance Methods
process_read(ready_fd)
click to toggle source
# File lib/invoker/reactor/reader.rb, line 20 def process_read(ready_fd) command_worker = Invoker.commander.get_worker_from_fd(ready_fd) begin data = read_data(ready_fd) send_data_to_worker(data, command_worker) rescue Invoker::Errors::ProcessTerminated remove_from_read_monitoring(command_worker, ready_fd) end end
read_data(ready_fd)
click to toggle source
# File lib/invoker/reactor/reader.rb, line 50 def read_data(ready_fd) sock_data = [] begin while(t_data = ready_fd.read_nonblock(64)) sock_data << t_data end rescue Errno::EAGAIN return sock_data.join rescue Errno::EWOULDBLOCK return sock_data.join rescue raise Invoker::Errors::ProcessTerminated.new(ready_fd,sock_data.join) end end
remove_from_read_monitoring(command_worker, ready_fd)
click to toggle source
# File lib/invoker/reactor/reader.rb, line 38 def remove_from_read_monitoring(command_worker, ready_fd) if command_worker read_array.delete(command_worker.pipe_end) command_worker.unbind else read_array.delete(ready_fd) end rescue StandardError => error Invoker::Logger.puts(error.message) Invoker::Logger.puts(error.backtrace) end
send_data_to_worker(data, command_worker)
click to toggle source
# File lib/invoker/reactor/reader.rb, line 30 def send_data_to_worker(data, command_worker) if command_worker command_worker.receive_data(data) else Invoker::Logger.puts("No reader found for incoming data") end end