diff --git a/01_phase_rust_src/sv-rustit/src/executor/execute_service/sent_signal.rs b/01_phase_rust_src/sv-rustit/src/executor/execute_service/sent_signal.rs index 5479880..dcec44d 100644 --- a/01_phase_rust_src/sv-rustit/src/executor/execute_service/sent_signal.rs +++ b/01_phase_rust_src/sv-rustit/src/executor/execute_service/sent_signal.rs @@ -23,6 +23,10 @@ pub fn sent_signal( svwait_var: i32, verbose: i8, command: &str, mut sv: status_ // case where command is run once. return misc::run_verbose(sv.sent_signal(b"o"), true, verbose, svwait_var, sv); }, + "p" => { + // case where it's the pause command which is entered. + return misc::pause_verbose(sv.sent_signal(b"p"), true, verbose, svwait_var, sv); + } other => { println!("Error, command {} not implemented.", other); // TODO : Put the real error // message. diff --git a/01_phase_rust_src/sv-rustit/src/executor/execute_service/sent_signal/misc.rs b/01_phase_rust_src/sv-rustit/src/executor/execute_service/sent_signal/misc.rs index b3883b0..917e9d3 100644 --- a/01_phase_rust_src/sv-rustit/src/executor/execute_service/sent_signal/misc.rs +++ b/01_phase_rust_src/sv-rustit/src/executor/execute_service/sent_signal/misc.rs @@ -24,7 +24,7 @@ pub fn print_status(mut sv: status_obj::StatusObj) -> i32 { } -pub fn run_verbose(sent_signal: bool, state: bool, verbose: i8, svwait_var: i32, mut sv: status_obj::StatusObj) -> i32 { +pub fn run_verbose(sent_signal: bool, expected: bool, verbose: i8, svwait_var: i32, mut sv: status_obj::StatusObj) -> i32 { // if the state is true, wait for the service to run. // If the state is false, wait for the service to down. if sent_signal && verbose == 1 { @@ -34,7 +34,36 @@ pub fn run_verbose(sent_signal: bool, state: bool, verbose: i8, svwait_var: i32, if status == 1 { return 1; } - if sv.is_up() == state { + if sv.is_up() == expected { + println!("ok: {}", sv.get_status_string()); + return 0 + } + if time_wait >= svwait_var { + println!("timeout: {}", sv.get_status_string()); + return 1 + } + time_wait += 1; + sleep(Duration::from_secs(1)); + } + } else if sent_signal && verbose == 0 { + return 0 + } else { + // Case sent_signal != true. + return 1 + } +} + +pub fn pause_verbose(sent_signal: bool, expected: bool, verbose: i8, svwait_var: i32, mut sv: status_obj::StatusObj) -> i32 { + // if the state is true, wait for the service to pause. + // if the state is false, wait for the service to continue. + if sent_signal && verbose == 1 { + let mut time_wait = 0; + loop { + let status = sv.update_status(); + if status == 1 { + return 1; + } + if sv.is_paused() == expected { println!("ok: {}", sv.get_status_string()); return 0 } diff --git a/01_phase_rust_src/sv-rustit/src/status_obj.rs b/01_phase_rust_src/sv-rustit/src/status_obj.rs index f512b31..fff197b 100644 --- a/01_phase_rust_src/sv-rustit/src/status_obj.rs +++ b/01_phase_rust_src/sv-rustit/src/status_obj.rs @@ -241,6 +241,14 @@ impl StatusObj { }; } + pub fn is_paused(&mut self) -> bool { + if self.pause_run == true { + return true + } else { + return false + } + } + pub fn get_name(&mut self) -> String { return self.svname.clone(); }