class Falcon::Service::Application
def initialize(environment)
def initialize(environment) super @bound_endpoint = nil end
def middleware
def middleware @evaluator.middleware end
def preload!
def preload! if scripts = @evaluator.preload scripts.each do |path| Async.logger.info(self) {"Preloading #{path}..."} full_path = File.expand_path(path, self.root) load(full_path) end end end
def setup(container)
def setup(container) container.run(name: self.name, restart: true) do |instance| Async(logger: logger) do |task| Async.logger.info(self) {"Starting application server for #{self.root}..."} server = Server.new(self.middleware, @bound_endpoint, self.protocol, self.scheme) server.run instance.ready! task.children.each(&:wait) end end super end
def start
def start Async.logger.info(self) {"Binding to #{self.endpoint}..."} @bound_endpoint = Async::Reactor.run do Async::IO::SharedEndpoint.bound(self.endpoint) end.wait preload! super end
def stop
def stop @bound_endpoint&.close @bound_endpoint = nil super end