utility.rs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. use std::collections::HashMap;
  2. use std::fs::OpenOptions;
  3. use std::io::prelude::*;
  4. use std::net::SocketAddr;
  5. use std::sync::atomic::AtomicU64;
  6. use std::sync::Arc;
  7. use std::time::{SystemTime, UNIX_EPOCH};
  8. use rand::seq::SliceRandom;
  9. use smol::{Executor, Task};
  10. //use crate::{net, serial, Channel, ClientProtocol, Result, SlabsManagerSafe};
  11. use crate::{net::messages as net, serial, Result};
  12. pub type AddrsStorage = std::sync::Arc<async_std::sync::Mutex<Vec<SocketAddr>>>;
  13. pub type Clock = std::sync::Arc<AtomicU64>;
  14. pub fn get_current_time() -> u64 {
  15. let start = SystemTime::now();
  16. let since_the_epoch = start
  17. .duration_since(UNIX_EPOCH)
  18. .expect("Incorrect system clock: time went backwards");
  19. let in_ms =
  20. since_the_epoch.as_secs() * 1000 + since_the_epoch.subsec_nanos() as u64 / 1_000_000;
  21. return in_ms;
  22. }
  23. pub fn save_to_addrs_store(stored_addrs: &Vec<SocketAddr>) -> Result<()> {
  24. let mut writer = OpenOptions::new()
  25. .write(true)
  26. .create(true)
  27. .open("addrs.dps")?;
  28. let buffer = serial::serialize(stored_addrs);
  29. writer.write_all(&buffer)?;
  30. Ok(())
  31. }
  32. pub fn load_stored_addrs() -> Result<Vec<SocketAddr>> {
  33. let mut reader = OpenOptions::new()
  34. .read(true)
  35. .write(true)
  36. .create(true)
  37. .open("addrs.dps")?;
  38. let mut buffer = Vec::new();
  39. reader.read_to_end(&mut buffer)?;
  40. if !buffer.is_empty() {
  41. let addrs: Vec<SocketAddr> = serial::deserialize(&buffer)?;
  42. Ok(addrs)
  43. } else {
  44. Ok(vec![])
  45. }
  46. }