init method
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(),
});
}