class Gack::Server
The main TCP server
Attributes
logger[R]
port[R]
tcp[R]
Public Class Methods
new(tcp: TCPServer, port: 6565, logger: Gack::Logger)
click to toggle source
# File lib/gack/server.rb, line 10 def initialize(tcp: TCPServer, port: 6565, logger: Gack::Logger) @tcp = tcp @port = port @logger = logger end
Public Instance Methods
event_loop(&blk)
click to toggle source
# File lib/gack/server.rb, line 16 def event_loop(&blk) logger.info("starting. port=#{port}") server = tcp.new(port) loop do Thread.new(server.accept) do |client| main_handler(client, &blk) end end rescue StandardError => e logger.error(e) end
failure_response()
click to toggle source
# File lib/gack/server.rb, line 53 def failure_response Response.new(Response::StatusCodes::TEMPORARY_FAILURE, 'Server Error') end
main_handler(client, &blk)
click to toggle source
# File lib/gack/server.rb, line 30 def main_handler(client, &blk) unrescued_handler(client, &blk) rescue StandardError => e logger.error(e) failure_response.finalize end
unrescued_handler(client, &blk)
click to toggle source
# File lib/gack/server.rb, line 38 def unrescued_handler(client, &blk) raw_request = receive_request(client) request = Request.new(raw_request) logger.info("request received: #{request.location}") response = blk.call(request) logger.info("response: #{response.status_code}") client.puts(response.finalize) client.close end
Private Instance Methods
receive_request(client)
click to toggle source
# File lib/gack/server.rb, line 59 def receive_request(client) request = '' begin client.read_nonblock(2056, request) rescue IO::WaitReadable IO.select([client]) retry end request end