FalconSourceFalconServiceServer

class Server

Definitions

def preload!

Preload any resources specified by the environment.

Implementation

def preload!
	root = @evaluator.root
	
	if scripts = @evaluator.preload
		scripts = Array(scripts)
		
		scripts.each do |path|
			Console.logger.info(self) {"Preloading #{path}..."}
			full_path = File.expand_path(path, root)
			load(full_path)
		end
	end
end

def start

Prepare the bound endpoint for the server.

Implementation

def start
	@endpoint = @evaluator.endpoint
	
	Sync do
		@bound_endpoint = @endpoint.bound
	end
	
	preload!
	
	Console.logger.info(self) {"Starting #{self.name} on #{@endpoint}"}
	
	super
end

def setup(container)

Setup the container with the application instance.

Signature

parameter container Async::Container::Generic

Implementation

def setup(container)
	container_options = @evaluator.container_options
	
	container.run(name: self.name, **container_options) do |instance|
		evaluator = @environment.evaluator
		
		Async do |task|
			server = Falcon::Server.new(evaluator.middleware, @bound_endpoint, protocol: @endpoint.protocol, scheme: @endpoint.scheme)
			
			server.run
			
			instance.ready!
			
			task.children.each(&:wait)
		end
	end
end

def stop(...)

Close the bound endpoint.

Implementation

def stop(...)
	if @bound_endpoint
		@bound_endpoint.close
		@bound_endpoint = nil
	end
	
	@endpoint = nil
	
	super
end