serve method

void serve(
  1. Config config
)

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');
  });
}