init method

Future<void> init({
  1. bool verbose = false,
})

Implementation

Future<void> init({bool verbose = false}) async {
  if (verbose) {
    consoler.minLogLevel = LogLevel.verbose;
  }
  log(
    "Starting server on ${configManager.host}:${configManager.port}",
    level: LogLevel.info,
  );
  log('Verbose logging activated', level: LogLevel.verbose);
  try {
    await initPluginSystem();
    log('Plugin system initialized', level: LogLevel.info);
  } catch (e) {
    log(
      'Error initializing plugin system: $e, continuing without',
      level: LogLevel.warning,
    );
  }
  SecurityContext? securityContext;
  try {
    final privateKey = await File('certs/server.key').readAsBytes();
    final certificate = await File('certs/server.crt').readAsBytes();
    securityContext = SecurityContext()
      ..usePrivateKeyBytes(privateKey)
      ..useCertificateChainBytes(certificate);
    log('Certificates found, using secure connection', level: LogLevel.info);
  } on PathNotFoundException catch (_) {
    log(
      'No certificates found, using insecure connection',
      level: LogLevel.warning,
    );
  }
  if (configManager.whitelistEnabled && !configManager.accountRequired) {
    log(
      'Whitelist is enabled, but account requirement is disabled. This allows users to join without an account.',
      level: LogLevel.warning,
    );
  }
  final server = _server = NetworkerSocketServer(
    InternetAddress.anyIPv4,
    configManager.port,
    securityContext: securityContext,
    filterConnections: buildFilterConnections(
      loadProperty: (request) =>
          (getWorld(request.uri.path) ?? defaultWorld).eventSystem.runPing(
            request,
            GameProperty.defaultProperty.copyWith(
              description: configManager.description,
              maxPlayers: configManager.maxPlayers,
              currentPlayers: _server?.clientConnections.length,
              packsSignature: assetManager.createSignature(),
            ),
          ),
    ),
  );

  final transformer = _pipe = NetworkerPipeTransformer<String, WorldEvent>(
    WorldEventMapper.fromJson,
    (e) => e.toJson(),
  );
  transformer.read.listen(_onClientEvent);
  server
    ..clientConnect.listen(_onJoin)
    ..clientDisconnect.listen(_onLeave)
    ..connect(StringNetworkerPlugin()..connect(transformer));
  await _server?.init();

  consoler.registerPrograms({
    'stop': StopProgram(this),
    'save': SaveProgram(this),
    'packs': PacksProgram(this),
    'players': PlayersProgram(this),
    'say': SayProgram(this),
    'reset': ResetProgram(this),
    'kick': KickProgram(this),
    'whitelist': WhitelistProgram(this),
    null: UnknownProgram(),
  });
}