node.rs 809 B

123456789101112131415161718192021222324252627282930313233
  1. use std::cmp::max;
  2. use darkfi::util::serial::{Decodable, Encodable};
  3. use crate::{Event, GSet};
  4. #[derive(Debug, Clone, PartialEq, Eq)]
  5. pub struct Node {
  6. // name to idnetifie the node
  7. name: String,
  8. // a grow-only set
  9. pub(crate) gset: GSet<Event>,
  10. // a counter for the node
  11. time: u64,
  12. }
  13. impl Node {
  14. pub fn new(name: &str) -> Self {
  15. Self { name: name.into(), gset: GSet::new(), time: 0 }
  16. }
  17. pub fn receive_event(&mut self, event: &Event) {
  18. self.time = max(self.time, event.counter) + 1;
  19. self.gset.insert(event);
  20. }
  21. pub fn send_event<T: Decodable + Encodable>(&mut self, value: T) -> Event {
  22. self.time += 1;
  23. let event = Event::new(&value, self.time, self.name.clone());
  24. self.gset.insert(&event);
  25. event
  26. }
  27. }