load static method

Future<SetonixServer> load({
  1. String? worldFile,
  2. SetonixConfig argsConfig = const SetonixConfig(),
})

Implementation

static Future<SetonixServer> load({
  String? worldFile,
  SetonixConfig argsConfig = const SetonixConfig(),
}) async {
  String rootDirectory = Directory.current.path;
  if (Platform.script.scheme == 'file') {
    final scriptDir = p.dirname(Platform.script.toFilePath());
    if (p.basename(scriptDir) == 'bin') {
      rootDirectory = p.dirname(scriptDir);
    }
  }

  final assetManager = ServerAssetManager();
  final consoler = Consoler(
    defaultProgramConfig: DefaultProgramConfiguration(
      description: "Setonix server",
    ),
  );
  await _runStaticLogZone(
    consoler,
    () => assetManager.init(console: consoler, rootPath: rootDirectory),
  );
  final configManager = ConfigManager(argsConfig: argsConfig);
  await configManager.loadConfig(rootPath: rootDirectory);
  final apiEndpoint = configManager.apiEndpoint;
  UserService userService;
  if (apiEndpoint.isNotEmpty) {
    final uri = Uri.tryParse(apiEndpoint);
    if (uri == null || !_isSafeRemoteEndpoint(uri)) {
      throw ArgumentError.value(
        apiEndpoint,
        'apiEndpoint',
        'Remote user API endpoints must use HTTPS, except localhost HTTP.',
      );
    }
    userService = RemoteUserService(
      apiEndpoint: apiEndpoint,
      endpointSecret: configManager.endpointSecret,
    );
  } else {
    final fileService = FileUserService();
    await fileService.setup(rootPath: rootDirectory);
    userService = fileService;
  }
  final userManager = UserManager(
    guestPrefix: configManager.guestPrefix,
    service: userService,
    whitelistEnabled: configManager.whitelistEnabled,
  );
  final challengeManager = configManager.accountRequired
      ? ChallengeManager()
      : null;
  return SetonixServer._(
    consoler,
    assetManager,
    configManager,
    userManager,
    challengeManager,
    rootDirectory,
  );
}