util.rs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. use crate::model::{ConnectInfo, Session};
  2. use darkfi::{util::serial, Result};
  3. use smol::Timer;
  4. use std::time::Duration;
  5. /// Sleep for any number of milliseconds.
  6. pub async fn sleep(millis: u64) {
  7. Timer::after(Duration::from_millis(millis)).await;
  8. }
  9. pub fn make_node_id(node_name: &String) -> Result<String> {
  10. let mut id = serial::serialize_hex(node_name);
  11. id.insert_str(0, "NODE");
  12. Ok(id)
  13. }
  14. pub fn make_session_id(node_id: &str, session: &Session) -> Result<String> {
  15. let mut num = 0_u64;
  16. let session_chars = match session {
  17. Session::Inbound => vec!['i', 'n'],
  18. Session::Outbound => vec!['o', 'u', 't'],
  19. Session::Manual => vec!['m', 'a', 'n'],
  20. Session::Offline => vec!['o', 'f', 'f'],
  21. };
  22. for i in session_chars {
  23. num += i as u64
  24. }
  25. for i in node_id.chars() {
  26. num += i as u64
  27. }
  28. let mut id = serial::serialize_hex(&num);
  29. id.insert_str(0, "SESSION");
  30. Ok(id)
  31. }
  32. pub fn make_connect_id(id: &u64) -> Result<String> {
  33. let mut id = serial::serialize_hex(id);
  34. id.insert_str(0, "CONNECT");
  35. Ok(id)
  36. }
  37. pub fn make_empty_id(node_id: &str, session: &Session, count: u64) -> Result<String> {
  38. let count = count * 2;
  39. let mut num = 0_u64;
  40. let id = match session {
  41. Session::Inbound => {
  42. let session_chars = vec!['i', 'n'];
  43. for i in session_chars {
  44. num += i as u64
  45. }
  46. for i in node_id.chars() {
  47. num += i as u64
  48. }
  49. num += count;
  50. let mut id = serial::serialize_hex(&num);
  51. id.insert_str(0, "EMPTYIN");
  52. id
  53. }
  54. Session::Outbound => {
  55. let session_chars = vec!['o', 'u', 't'];
  56. for i in session_chars {
  57. num += i as u64
  58. }
  59. for i in node_id.chars() {
  60. num += i as u64
  61. }
  62. num += count;
  63. let mut id = serial::serialize_hex(&num);
  64. id.insert_str(0, "EMPTYOUT");
  65. id
  66. }
  67. Session::Manual => {
  68. let session_chars = vec!['m', 'a', 'n'];
  69. for i in session_chars {
  70. num += i as u64
  71. }
  72. for i in node_id.chars() {
  73. num += i as u64
  74. }
  75. num += count;
  76. let mut id = serial::serialize_hex(&num);
  77. id.insert_str(0, "EMPTYMAN");
  78. id
  79. }
  80. Session::Offline => {
  81. let session_chars = vec!['o', 'f', 'f'];
  82. for i in session_chars {
  83. num += i as u64
  84. }
  85. for i in node_id.chars() {
  86. num += i as u64
  87. }
  88. num += count;
  89. let mut id = serial::serialize_hex(&num);
  90. id.insert_str(0, "EMPTYOFF");
  91. id
  92. }
  93. };
  94. Ok(id)
  95. }
  96. pub fn is_empty_session(connects: &[ConnectInfo]) -> bool {
  97. return connects.iter().all(|conn| conn.is_empty)
  98. }