run method

Future<bool> run()

Implementation

Future<bool> run() async {
	if (_running) return false;
	log('Server start initiated');
	_running = true;
	await runZonedGuarded(
		() async {
			try {
				_processSignalListeners.add(ProcessSignal.sighup.watch().listen((_) => _shutdown(_, 1)));
				_processSignalListeners.add(ProcessSignal.sigint.watch().listen((_) {
					if (_confirm(ProcessSignal.sigint, 'Press ^C again shortly to stop the server')) _shutdown(_, 2);
				}));
				if (!Platform.isWindows) {
					_processSignalListeners.add(ProcessSignal.sigterm.watch().listen((_) => _shutdown(_, 15)));
					_processSignalListeners.add(ProcessSignal.sigusr1.watch().listen((_) => _shutdown(_, 10)));
					_processSignalListeners.add(ProcessSignal.sigusr2.watch().listen((_) => _shutdown(_, 12)));
				}
				console.on('stop', (_, __) => _shutdown(ProcessSignal.sigquit, 0),
					validator: RegExp(r'^$'),
					usage: 'stop',
					similar: <String>['exit', 'quit', 'shutdown'],
				);
				await _initMongoDB();
				await _initModules();
				_events.dispatch(ReadyEvent());
				_runModules();
				await _cmServer.serve();
			}
			catch (err, stack) {
				await error('Server initialization failed: $err', stack);
				await _shutdown(ProcessSignal.sigabrt, 6);
			}
		},
		// Handle all unhandled exceptions in order to prevent application crash
		(Object err, StackTrace stack) async {
			error('UNHANDLED: $err', stack);
		}
	);
	return _running;
}