stop method
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');
}