serve method
Implementation
void serve(final Config config) {
check(config.ip).isNotEmpty();
check(config.docroot).isNotEmpty();
check(config.port).isNotEmpty();
final ip = config.ip;
final port = config.port;
final myHttpRootPath =
config.docroot; //Platform.script.resolve(folder).toFilePath();
late VirtualDirectory virtDir;
void directoryHandler(final Directory dir, final HttpRequest request) {
log('$dir');
final indexUri = Uri.file(dir.path).resolve('index.html');
virtDir.serveFile(File(indexUri.toFilePath()), request);
}
virtDir = VirtualDirectory(myHttpRootPath)
..allowDirectoryListing = true
..followLinks = true
..jailRoot = false;
virtDir.directoryHandler = directoryHandler;
Future<HttpServer> connect;
if (config.usesecureconnection) {
final context = SecurityContext();
context.useCertificateChain(config.certfile);
context.usePrivateKey(config.keyfile);
connect = HttpServer.bindSecure(ip, int.parse(port), context);
log('Using a secure connection on $ip - Scheme should be https!');
} else {
connect = HttpServer.bind(ip, int.parse(port));
}
runZonedGuarded(() {
connect.then((final server) {
log('Server running $ip on port: $port, $myHttpRootPath');
server.listen((final request) {
log('${request.connectionInfo?.remoteAddress.address}:${request.connectionInfo?.localPort} - ${request.method} ${request.uri}');
virtDir.serveRequest(request);
});
});
}, (error, stack) {
Log.e('Error running http server: $error $stack');
});
}