class Fluent::PluginHelper::HttpServer::Server

def initialize(addr:, port:, logger:, default_app: nil)

Parameters:
  • default_app (Object) -- This method must have #call.
def initialize(addr:, port:, logger:, default_app: nil)
  @addr = addr
  @port = port
  @logger = logger
  # TODO: support https and http2
  @uri = URI("http://#{@addr}:#{@port}").to_s
  @router = Router.new(default_app)
  @reactor = Async::Reactor.new
  @server = Async::HTTP::Server.new(
    App.new(@router, @logger),
    Async::HTTP::Endpoint.parse(@uri)
  )
  if block_given?
    yield(self)
  end
end

def start(notify = nil)

def start(notify = nil)
  @logger.debug("Start async HTTP server listening #{@uri}")
  task = @reactor.run do
    @server.run
    if notify
      notify.push(:ready)
    end
  end
  task.stop
  @logger.debug('Finished HTTP server')
end

def stop

def stop
  @logger.debug('closing HTTP server')
  if @reactor
    @reactor.stop
  end
end