Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. extern crate futures;
  2. extern crate tokio;
  3. extern crate tokio_threadpool;
  4.  
  5. // use std::{thread, time};
  6. use std::time::{Duration, Instant};
  7. use std::net::SocketAddr;
  8.  
  9. use futures::prelude::*;
  10.  
  11. use tokio::io;
  12. // use tokio::prelude::*;
  13. use tokio::timer::Interval;
  14. // use tokio_threadpool::ThreadPool;
  15. use tokio::runtime::Builder;
  16. use tokio::net::{{TcpStream, TcpListener}};
  17.  
  18. fn prepare_server() -> Box<Future<Item = (), Error = io::Error> + Send> {
  19. let addr = "127.0.0.1:8080".parse::<std::net::SocketAddr>().unwrap();
  20. let listener = TcpListener::bind(&addr).unwrap();
  21. let server = listener
  22. .incoming()
  23. .for_each(move |socket: tokio::net::TcpStream| {
  24. let address = socket.peer_addr().expect("");
  25. println!("Received connection from {}", address);
  26. Ok(())
  27. });
  28. Box::new(server)
  29. }
  30.  
  31. fn delay_future() -> Box<Future<Item = (), Error = io::Error> + Send> {
  32. let wait_time = Duration::from_millis(100);
  33. let now = Instant::now();
  34. let task = Interval::new(now, wait_time)
  35. .map_err(|e| panic!("interval errored; err={:?}", e))
  36. .take(10)
  37. .for_each(|instant| {
  38. println!("fire; instant={:?}", instant);
  39. Ok(())
  40. });
  41. Box::new(task)
  42. }
  43.  
  44. fn connect_future() -> Box<Future<Item = (), Error = io::Error> + Send> {
  45. println!("Executing connect future...");
  46. let server_addr = "94.130.182.25:443".parse::<SocketAddr>().unwrap();
  47. let server_conn = TcpStream::connect(&server_addr);
  48. let task = server_conn
  49. .map_err(|err| eprintln!("{}", err))
  50. .then(|socket| {
  51. println!("conn successful on {:?}", socket);
  52. Ok(())
  53. });
  54. println!("End Future");
  55. Box::new(task)
  56. }
  57.  
  58.  
  59. fn main() -> Result<(),String> {
  60. let mut pool = Builder::new()
  61. .core_threads(4)
  62. .build()
  63. .unwrap();
  64.  
  65. pool.spawn(delay_future().map_err(|e| eprintln!("future error {}", e)));
  66. pool.spawn(connect_future().map_err(|e| eprintln!("future error {}", e)));
  67. pool.spawn(prepare_server().map_err(|e| eprintln!("future error {}", e)));
  68. // kills the future thread
  69. pool.shutdown_on_idle().wait().expect("shutdown error!");
  70. Ok(())
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement