DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/RunTime/Shutdown/
ShutdownWithRecovery.rs1use CommonLibrary::Error::CommonError::CommonError;
6
7use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, dev_log};
8
9impl ApplicationRunTime {
10 pub async fn ShutdownWithRecovery(&self) -> Result<(), CommonError> {
11 dev_log!("lifecycle", "[ApplicationRunTime] Initiating robust shutdown with recovery...");
12
13 let mut ShutdownErrors:Vec<String> = Vec::new();
14
15 match self.ShutdownCocoonWithRetry().await {
16 Ok(()) => dev_log!("lifecycle", "[ApplicationRunTime] Cocoon shutdown successful"),
17
18 Err(Error) => {
19 ShutdownErrors.push(format!("Cocoon shutdown failed: {}", Error));
20
21 dev_log!("lifecycle", "warn: [ApplicationRunTime] Cocoon shutdown failed, continuing...");
22 },
23 }
24
25 match self.DisposeTerminalsSafely().await {
26 Ok(()) => dev_log!("lifecycle", "[ApplicationRunTime] Terminal disposal successful"),
27
28 Err(Error) => {
29 ShutdownErrors.push(format!("Terminal disposal failed: {}", Error));
30
31 dev_log!(
32 "lifecycle",
33 "warn: [ApplicationRunTime] Terminal disposal failed, continuing..."
34 );
35 },
36 }
37
38 match self.SaveApplicationState().await {
39 Ok(()) => dev_log!("lifecycle", "[ApplicationRunTime] Application state saved"),
40
41 Err(Error) => {
42 ShutdownErrors.push(format!("State save failed: {}", Error));
43
44 dev_log!(
45 "lifecycle",
46 "warn: [ApplicationRunTime] Failed to save application state, continuing..."
47 );
48 },
49 }
50
51 self.FlushPendingOperations().await;
52
53 if !ShutdownErrors.is_empty() {
54 Err(CommonError::Unknown {
55 Description:format!("Shutdown completed with {} errors: {:?}", ShutdownErrors.len(), ShutdownErrors),
56 })
57 } else {
58 Ok(())
59 }
60 }
61}