Compare commits

..

No commits in common. "a353c48d21d389e37b1b4924e4fd5248d397e58d" and "793c8eda8de1bc0723485a6bff45390f6362ebf1" have entirely different histories.

6 changed files with 29 additions and 49 deletions

View file

@ -1 +1 @@
151 150

View file

@ -1,7 +1,8 @@
use tracing::{debug, info}; use tracing::{debug, info};
use std::sync::mpsc::{Receiver, Sender}; use std::sync::mpsc::{Receiver, Sender};
use std::thread::JoinHandle;
use crate::lifecycle::{LifeState, LifecycleCommand, LifecycleCommandResponse, LifecycleReceipt}; use crate::lifecycle::{LifeState, LifecycleCommand, LifecycleCommandResponse, LifecycleReceipt};
use crate::lifecycle::LifeState::{Dying, Buried, Genisys, Dead}; use crate::lifecycle::LifeState::{Dying, Buried, Genisys};
use crate::organs::organ_factory::OrganFactory; use crate::organs::organ_factory::OrganFactory;
use crate::organs::organ_socket::OrganSocket; use crate::organs::organ_socket::OrganSocket;
use crate::protocols::{BrainMessage, OrganCommand, OrganCommandEnvelope}; use crate::protocols::{BrainMessage, OrganCommand, OrganCommandEnvelope};
@ -49,16 +50,12 @@ impl Brain {
self.request_heart_beat(); self.request_heart_beat();
} }
while let Ok(message) = self.organ_rx.try_recv() { Self::rest()
}
self.rest();
} }
} }
fn rest(&self) { fn rest() {
debug!("Brain is {} and resting.", self.state); debug!("Brain is resting.");
std::thread::sleep(std::time::Duration::from_millis(200)) std::thread::sleep(std::time::Duration::from_millis(200))
} }
@ -89,11 +86,12 @@ impl Brain {
fn can_transition_lifecycle(&self, command: &LifecycleCommand) -> bool fn can_transition_lifecycle(&self, command: &LifecycleCommand) -> bool
{ {
if command.required_state == Buried || command.required_state == Dying { if command.required_state == Buried || command.required_state == Dying {
return true return true
} }
if self.state == Dead && command.required_state == Genisys { if self.state == LifeState::Dead && command.required_state == LifeState::Genisys {
return true return true
} }

View file

@ -1,40 +1,20 @@
use std::time::Instant; use std::time::Instant;
use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LifeState { pub enum LifeState {
Dead, Dead,
Genisys, Genisys,
// Sleeping, Sleeping,
// Wakening, Wakening,
// Awake, Awake,
// DeepThought, DeepThought,
// ActionFocused, ActionFocused,
// Flight, Flight,
// Panic, Panic,
Dying, Dying,
Buried, Buried,
} }
impl fmt::Display for LifeState {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let state_str = match self {
LifeState::Dead => "Dead",
LifeState::Genisys => "In Genesis",
// LifeState::Sleeping => "Sleeping",
// LifeState::Wakening => "Wakening",
// LifeState::Awake => "Fully Awake",
// LifeState::DeepThought => "In Deep Thought",
// LifeState::ActionFocused => "Action Focused",
// LifeState::Flight => "In Flight",
// LifeState::Panic => "PANIC!",
LifeState::Dying => "Dying",
LifeState::Buried => "Buried",
};
write!(f, "{}", state_str)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LifecycleCommandResponse { pub enum LifecycleCommandResponse {
Ok, Ok,

View file

@ -59,12 +59,14 @@ fn wait_for_death(tx: Sender<LifecycleCommand>, rx: Receiver<LifecycleReceipt>)
} }
fn let_there_be_life(tx: &Sender<LifecycleCommand>, rx: &Receiver<LifecycleReceipt>) { fn let_there_be_life(tx: &Sender<LifecycleCommand>, rx: &Receiver<LifecycleReceipt>) {
// 3. Command: Genisys
info!("God: Commanding Genisys..."); info!("God: Commanding Genisys...");
let _ = tx.send(LifecycleCommand { let _ = tx.send(LifecycleCommand {
required_state: LifeState::Genisys, required_state: LifeState::Genisys,
command_time: Instant::now(), command_time: Instant::now(),
}); });
// Wait for Brain's "OK"
if let Ok(receipt) = rx.recv() { if let Ok(receipt) = rx.recv() {
info!("Brain: {:?}", receipt.response); info!("Brain: {:?}", receipt.response);
} }

View file

@ -33,7 +33,7 @@ impl Heart {
match envelope.command { match envelope.command {
OrganCommand::Beat(_) => { OrganCommand::Beat(_) => {
if self.ready_to_beat() { if (self.ready_to_beat()) {
self.beat(); self.beat();
} }
} }

View file

@ -2,18 +2,18 @@ use crate::coordinates::Point3D;
#[derive(Debug)] #[derive(Debug)]
pub enum OrganCommand { pub enum OrganCommand {
// Sleep, Sleep,
// Waken, Waken,
// Pause, Pause,
// Resume, Resume,
Beat (u32), Beat (u32),
// ChangeSpeed (u32), ChangeSpeed (u32),
// GoFaster(u32), GoFaster(u32),
// GoSlower(u32), GoSlower(u32),
// MoveTo { MoveTo {
// relative_to_center: Point3D, relative_to_center: Point3D,
// speed: u32 speed: u32
// } }
} }
#[derive(Debug)] #[derive(Debug)]