From 43a093afd1234c2179bfd7309b26cb9371be01d9 Mon Sep 17 00:00:00 2001 From: Myrddin Dundragon Date: Fri, 9 May 2025 12:24:48 -0400 Subject: [PATCH] Finished getting the project to work. Just needs clean up and commenting/documenting. --- src/.main.rs.swp | Bin 20480 -> 0 bytes src/main.rs | 42 ++++++++++++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 6 deletions(-) delete mode 100644 src/.main.rs.swp diff --git a/src/.main.rs.swp b/src/.main.rs.swp deleted file mode 100644 index 0332a3f32cd74bffdd17eab055da560e6bca9ba4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 zcmeI3e~cVe9l)m`h+-{2G%*_S^=fbrwtH_kG{@=KKB5bZ*mSyZ5LIYMUKCr#Q|JK6u80cidj*p{X@aYcXy# z{7{ap`q|?(^-R>&@v5yH=Xxt}q8)gP%{c0WjfuodbrATeo=D>QM9cHTTAUn1PIuq3_J`E z!98#T%z+2fumh&xA~+3Bg;QW1Jn>$~xfwnQ?}wMyI?hY*INS%{g0UGM{~;!YU)VN)6hI#sPsn(uPeToeUdB8@wmT2rA#k~Sh5 zawrpSE@1Xm#{E`Ee%J{hHuKCTb z{CjY7=+~$n?CXE#{aCAXK`R|L{ZJ>hF|5@;oNu*bKTLygePwKKpuI$^q^;}z{Gy7& zU{NKy9)*oWb;8sSjI`8mAvRK1t}5%&(3@ktY1j5*go++bJSJ3r*v3#?Gs=aJQfz2c zcgAr=8%JAy-GaUHJ{4`)+sDSJrrGhHc*Zri$1V?-ZAc#y9X9f@b=Bdev8vMJPEm4k zd*!PXTUpDlEQZDfU3}DP7KalPqDkL|Ri`MuxIJXc-a))?wlH~n`?HM|&Kp=aX2mqD z18KZyHY=-iYm_`4B-&YaU49YQPP`^RqpT!a{40u zW*Eh~7;5ASqSnP4SMF-#(bsg6RB>J-$k)7vKR-_c=4Lxe5?^jDVW%~xd1Ew}VZVng z$QqZgN&PS-YdqLC8$ok>s+pUX>u&SU*)mxf94K_1UeNUe*?mFFL_%%efz4;4XH_fM zzi^>hQKGN(;A}D>h+R?Ti#UQeX6w3Qh&z?vlDN^HOmOMC#fY*tA9Rw1%6P34c4MzCP3bb9 zVoN`y0h6XNi;L>YnG*YD^2aaC+uQ5aiK=2N#b`Pd31fm!MN!+#M3HIw*-5Zs=8Q(w zJY3GCGUWT|NZ54UPAu++QF@>l+ zYgEot1{)o?DvN^cY5f>@g091YU?MkjU)Crh z%9_L<$;h|kASt8dCe0BapqoGoEZ@&Y_l67Y1ft^4MfnZ(F8d6>c5azEiN7sZq2 zX*eBL^%&Q8UAyKcEbdu^PXjqzNLi*NbGSU_jrX00(yhg#axZt?!=LCN3$3bZw@ec{ zw=~d9&Zn8!vYMqQ95-@$${F#ZTZ<`_>%{MgiS=rqtg6!sUJ#HFXh-t@SIJ3FBafB* zKYxDz5AycM;3u#Mm%w(|1}DS6$>Se{F6@90z=?1IyhzUeEIbKMz}>J1Ho#xV*Z&B= zgU8^v@C*1kJP7x|op1;aLIs{CfBysA4pXodULb!z3YWkdkUai6ScJ3S8FKYU;LC6o zTn3lI8SpZFy&t{@_dx?@U<%HF_kpp8xI_6VEl^sZv_NTrx48wD@{dDQWD9a^^#kbr z3mwXhT~lgk6J_Z57(5xz39js-J*SxOhr_wvoCcj4i+DY5%hLxAKg8!6eQkGUH;2#E^04 zI(83rP?6Gj<^||8oyNi0(>Th!=?G5IjJ=lRO-kA~C7qAVexlnLmyEF&qFWE{MfBo z9d2CktRQOL+}ls?%1iJC{uI5;)I0kd*uBR2Kxxy4LeE|f7rZ4X7n zpK=4x-lkzSwM&w7+XmeixagcFRhHp4nRAv8GZ-^Su!D^>&*noYiyg8;be6B=XG#h~ zDYJ0lYzmr1Ctnq^36^-n6ObZO7J3lC~jBN>9_S=`8M& z)OcFcdw?SU<(EfC%Tv$|SJ)L%j$dW6y1mx7N&86w+pLtNdyXlctp5CDsE*vPn4C2* z*=lnUXm0WKYSFOyAiBUVDt-fUI zsT~8Xmfv1%O^&-uwqg$mrf@X4tk>)`H;>;~2E`%mXRxX?WCf+93Ptg`cuscevNN-t z|5K+;)1jW9X{#b5I%IWK%GgPsKo!a;RW-IRyPGw5;No7mq)geH2QTKkcQ5P-kqvSC zekI0Lm+AVp&iRtZvsJ8=44gGw7_l?Jb#c7>DZ}CH!fI)-erF}U*=Cz7^ggQ=Um1?{ zitPHUbRj!?pnNCiFb~Q9U*S3RzsPwd|Cg$PeEvp`FVFkG5AvMf*UcD5CY_EI=tnW2ut6w%N-vL`@ znxUWhiwVxqk^YXpJ$JoT-T_-Be{!=lYPMmYb*iPow<~)6mR!!HdcCHu${&!D(B+%1 zE9D=aGuM+!;KfazK<7p^<=39P-i8PsZ0V}bdFLY2o+w2jc8of`xGd%Z-;!^zb, else { let larger_seconds: u64 = seconds as u64; - let delay_duration: Duration = Duration::from_secs(larger_seconds); + let delay_duration: Duration = + Duration::from_secs(larger_seconds); match command_sender.try_send(Command::Propulsion { delay: delay_duration }) { Ok(_) => @@ -106,10 +109,22 @@ fn read_user_input(command_sender: mpsc::Sender, Ok(()) } +/// +fn maybe_tick<'a>(interval: Option<&'a mut Interval>) + -> Pin + Send + 'a>> +{ + match interval + { + Some(interval) => Box::pin(async move { interval.tick().await; () }), + None => Box::pin(std::future::pending()) + } +} + async fn process_commands(mut command_receiver: mpsc::Receiver, mut term_receiver: watch::Receiver) - ->IoResult<()> + -> IoResult<()> { + let mut propulsion_interval: Option = None; let mut stdout = tokio::io::stdout(); let mut running: bool = true; @@ -124,6 +139,7 @@ async fn process_commands(mut command_receiver: mpsc::Receiver, { stdout.write_all(b"Received: Cancel\n").await?; stdout.flush().await?; + propulsion_interval = None; } Command::Propulsion { delay } => @@ -132,13 +148,27 @@ async fn process_commands(mut command_receiver: mpsc::Receiver, writeln!(&mut buffer, "Received: {:?} delay", delay); stdout.write_all(&buffer).await?; stdout.flush().await?; - } - _ => {} + propulsion_interval = Some(tokio::time::interval(delay)); + + // Skip the first immediate tick + if let Some(interval) = propulsion_interval.as_mut() + { + interval.tick().await; // skip first tick + } + + } } } - _ = term_receiver.changed() => { + _ = maybe_tick(propulsion_interval.as_mut()) => + { + stdout.write_all(b"firing now!\n").await?; + stdout.flush().await?; + } + + _ = term_receiver.changed() => + { stdout.write_all(b"Communication task received shutdown message.").await?; stdout.flush().await?; running = *term_receiver.borrow_and_update();