class Falcon::Command::Virtual

def run(verbose = false)

def run(verbose = false)
	hosts = Falcon::Hosts.new
	root = Dir.pwd
	
	sites.each do |path|
		name = File.basename(path)
		
		hosts.add(name) do |host|
			host.app_root = File.expand_path(path, root)
			
			if @options[:self_signed]
				host.self_signed!(name)
			else
				host.ssl_certificate_path = File.join(path, "ssl", "fullchain.pem")
				host.ssl_key_path = File.join(path, "ssl", "privkey.pem")
			end
		end
	end
	
	controller = Async::Container::Controller.new
	
	hosts.each do |name, host|
		if container = host.start
			controller << container
		end
	end
	
	controller << Async::Container::Forked.new do |task|
		proxy = hosts.proxy
		secure_endpoint = Async::HTTP::URLEndpoint.parse(@options[:bind_secure], ssl_context: hosts.ssl_context)
		
		Process.setproctitle("Falcon Proxy")
		
		proxy_server = Falcon::Server.new(proxy, secure_endpoint)
		
		proxy_server.run
	end
	
	controller << Async::Container::Forked.new do |task|
		redirection = hosts.redirection
		insecure_endpoint = Async::HTTP::URLEndpoint.parse(@options[:bind_insecure])
		
		Process.setproctitle("Falcon Redirector")
		
		redirection_server = Falcon::Server.new(redirection, insecure_endpoint)
		
		redirection_server.run
	end
	
	Process.setproctitle("Falcon Controller")
	
	return controller
end