run method

  1. @override
Future<void> run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
Future<void> run() async {
  try {
    final disableHotReload = argResults!['disable-hot-reload'] as bool;

    print('Starting server...');
    final serverProcess = await Process.start(
      'dart',
      [
        'run',
        if (!disableHotReload) '--enable-vm-service',
        '.ruta/server.dart',
        if (!disableHotReload) '--hot-reload',
      ],
    );

    unawaited(serverProcess.stdout.pipe(stdout));
    unawaited(serverProcess.stderr.pipe(stderr));

    // Handle Ctrl+C
    ProcessSignal.sigint.watch().listen((_) {
      serverProcess.kill();
      exit(0);
    });

    final exitCode = await serverProcess.exitCode;
    if (exitCode != 0) {
      throw Exception('Server exited with code $exitCode');
    }
  } catch (e) {
    throw Exception('Error starting server: $e');
  }
}