main.rs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. use async_executor::Executor;
  2. use async_std::sync::Arc;
  3. use easy_parallel::Parallel;
  4. //use log::{error, info, warn};
  5. use url::Url;
  6. use darkfi::{
  7. net,
  8. net::Settings,
  9. util::cli::{get_log_config, get_log_level},
  10. Result,
  11. };
  12. #[async_std::main]
  13. async fn main() -> Result<()> {
  14. let log_level = get_log_level(1);
  15. let log_config = get_log_config();
  16. let env_log_file_path = match std::env::var("DARKFI_LOG") {
  17. Ok(p) => std::fs::File::create(p).unwrap(),
  18. Err(_) => std::fs::File::create("/tmp/darkfi.log").unwrap(),
  19. };
  20. simplelog::CombinedLogger::init(vec![
  21. simplelog::TermLogger::new(
  22. log_level,
  23. log_config.clone(),
  24. simplelog::TerminalMode::Mixed,
  25. simplelog::ColorChoice::Auto,
  26. ),
  27. simplelog::WriteLogger::new(log_level, log_config, env_log_file_path),
  28. ])?;
  29. let url = Url::parse("tcp://127.0.0.1:55555").unwrap();
  30. let settings = Settings {
  31. inbound: Some(url),
  32. outbound_connections: 0,
  33. manual_attempt_limit: 0,
  34. seed_query_timeout_seconds: 8,
  35. connect_timeout_seconds: 10,
  36. channel_handshake_seconds: 4,
  37. channel_heartbeat_seconds: 10,
  38. outbound_retry_seconds: 1200,
  39. external_addr: None,
  40. peers: Vec::new(),
  41. seeds: Vec::new(),
  42. node_id: String::new(),
  43. };
  44. let ex = Arc::new(Executor::new());
  45. let ex2 = ex.clone();
  46. let p2p = net::P2p::new(settings).await;
  47. let seed = DchatSeed::new(p2p);
  48. let nthreads = num_cpus::get();
  49. let (signal, shutdown) = async_channel::unbounded::<()>();
  50. let (_, result) = Parallel::new()
  51. .each(0..nthreads, |_| smol::future::block_on(ex.run(shutdown.recv())))
  52. .finish(|| {
  53. smol::future::block_on(async move {
  54. seed.start(ex2).await?;
  55. drop(signal);
  56. Ok(())
  57. })
  58. });
  59. result
  60. }
  61. struct DchatSeed {
  62. p2p: net::P2pPtr,
  63. }
  64. impl DchatSeed {
  65. fn new(p2p: net::P2pPtr) -> Self {
  66. Self { p2p }
  67. }
  68. async fn start(&self, executor: Arc<Executor<'_>>) -> Result<()> {
  69. self.p2p.clone().start(executor.clone()).await?;
  70. self.p2p.clone().run(executor.clone()).await?;
  71. Ok(())
  72. }
  73. }