class NoSE::Proxy::ProxyBase
A proxy server to interpret our query language and implement query plans
Attributes
logger[R]
Public Class Methods
new(config, result, backend)
click to toggle source
# File lib/nose/proxy.rb, line 9 def initialize(config, result, backend) @logger = Logging.logger['nose::proxy'] @result = result @backend = backend @config = config @continue = true end
Public Instance Methods
handle_connection(_socket)
click to toggle source
@abstract Subclasses should process a new connection
on the given socket
:nocov: @return [void]
# File lib/nose/proxy.rb, line 38 def handle_connection(_socket) fail NotImplementedError end
remove_connection(_socket)
click to toggle source
@abstract Subclasses should dispose of state associated with the socket :nocov: @return [void]
# File lib/nose/proxy.rb, line 46 def remove_connection(_socket) fail NotImplementedError end
start()
click to toggle source
Start the proxy server @return [void]
# File lib/nose/proxy.rb, line 21 def start @logger.info "Starting server on port #{@config[:port]}" server_socket = TCPServer.new('127.0.0.1', @config[:port]) server_socket.listen(100) @read_sockets = [server_socket] @write_sockets = [] loop do break unless @continue && select_connection(server_socket) end end
stop()
click to toggle source
Stop accepting connections @return [void]
# File lib/nose/proxy.rb, line 53 def stop @continue = false end
Private Instance Methods
accept_connection(server_socket)
click to toggle source
Accept the new connection @return [void]
# File lib/nose/proxy.rb, line 86 def accept_connection(server_socket) client_socket, = server_socket.accept @read_sockets << client_socket @write_sockets << client_socket end
process_connections(sockets)
click to toggle source
Process all pending connections @return [void]
# File lib/nose/proxy.rb, line 94 def process_connections(sockets) sockets.each do |socket| @write_sockets.delete socket @read_sockets.delete socket unless handle_connection socket end end
select_connection(server_socket)
click to toggle source
Select sockets which are available to be processed @return [void]
# File lib/nose/proxy.rb, line 61 def select_connection(server_socket) read, write, error = IO.select @read_sockets, @write_sockets, @read_sockets + @write_sockets, 5 return true if read.nil? # Check if we have a new incoming connection if read.include? server_socket accept_connection server_socket read.delete server_socket elsif error.include? server_socket @logger.error 'Server socket died' return false end # Remove all sockets which have errors error.each { |socket| remove_connection socket } @read_sockets -= error @write_sockets -= error # Handle connections on each available socket process_connections read + write end