stop method

Future<void> stop()

Stop the gRPC server

Implementation

Future<void> stop() async {
  if (_serverProcess == null) {
    debugPrint('[ServerProcessManager] Server not running');
    return;
  }

  debugPrint('[ServerProcessManager] Stopping server...');

  // Try to send shutdown RPC to release model resources gracefully
  if (_currentPort > 0) {
    try {
      final client = LiteRtLmClient();
      await client.connect(port: _currentPort);
      await client.shutdown();
      await client.disconnect();
      debugPrint('[ServerProcessManager] Shutdown RPC sent');
    } catch (e) {
      debugPrint('[ServerProcessManager] Failed to send shutdown RPC: $e');
    }
  }

  // Try graceful shutdown first
  _serverProcess!.kill(ProcessSignal.sigterm);

  // Wait for process to exit
  try {
    await _serverProcess!.exitCode.timeout(
      const Duration(seconds: 5),
      onTimeout: () {
        debugPrint('[ServerProcessManager] Graceful shutdown timed out, force killing');
        _serverProcess!.kill(ProcessSignal.sigkill);
        return -1;
      },
    );
  } catch (e) {
    debugPrint('[ServerProcessManager] Error stopping server: $e');
  }

  _serverProcess = null;
  debugPrint('[ServerProcessManager] Server stopped');
}