Guest User

Untitled

a guest
May 24th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. extern crate futures;
  2. extern crate tokio;
  3.  
  4. use futures::sync::mpsc;
  5. use futures::Future;
  6. use futures::Stream;
  7. use futures::Sink;
  8. use tokio::io;
  9. use tokio::net::TcpListener;
  10.  
  11. use std::collections::HashMap;
  12. use std::str;
  13. use std::string::String;
  14. use std::sync::Arc;
  15. use std::sync::Mutex;
  16.  
  17.  
  18. fn main() {
  19. let mut channels: HashMap<i32, mpsc::Sender<String>> = HashMap::new();
  20.  
  21. let mut rt = tokio::runtime::Runtime::new().unwrap();
  22.  
  23. for i in 0..3 {
  24. let (tx, rx) = mpsc::channel::<String>(10);
  25.  
  26. channels.insert(i, tx);
  27.  
  28. let rec_future = rx.for_each(|rec| {
  29. println!("Received in a worker: {:?}", rec);
  30. Ok(())
  31. });
  32.  
  33. rt.spawn(rec_future);
  34.  
  35. };
  36.  
  37. let shared_channels = Arc::new(Mutex::new(channels));
  38.  
  39. let addr = "0.0.0.0:6142".parse().unwrap();
  40. let listener = TcpListener::bind(&addr).unwrap();
  41.  
  42. let server = listener
  43. .incoming()
  44. .map(move |socket| {
  45. let shared_channels_local = Arc::clone(&shared_channels);
  46. println!("accepted socket; addr={:?}", socket.peer_addr().unwrap());
  47.  
  48. io::read_exact(socket, [0_u8; 10])
  49. .map(|(_, buf)| buf)
  50. .map(|buf| {
  51. let rec_str = str::from_utf8(&buf).unwrap();
  52. println!("Received: {:?}", &rec_str);
  53. String::from(rec_str)
  54. })
  55. .map( move |data| {
  56.  
  57. let local_channels = shared_channels_local.lock().unwrap();
  58. let x = local_channels.get(&1).unwrap();
  59. println!("Start sending!");
  60. x.clone().send(data)
  61. })
  62. })
  63. .buffer_unordered(20)
  64. .for_each(|_| Ok(()))
  65. .map_err(|err| {
  66. println!("accept error = {:?}", err);
  67. });
  68.  
  69. rt.spawn(server);
  70.  
  71. rt.shutdown_on_idle().wait().unwrap();
  72. }
Add Comment
Please, Sign In to add comment