pub fn init(stdin: PollFd, stdout: PollFd) -> (Lines, Writer)
Examples found in repository?
examples/readline.rs (line 24)
13fn main() {
14 // Create the event loop that will drive this server
15 let mut l = Core::new().unwrap();
16 let handle = l.handle();
17
18 let periodic_timer1 = tokio_core::reactor::Interval::new(std::time::Duration::from_millis(2500), &handle).unwrap();
19 let periodic_timer2 = tokio_core::reactor::Interval::new(std::time::Duration::from_millis(500), &handle).unwrap();
20 let stdio = async_readline::RawStdio::new(&handle).unwrap();
21 let (stdin, stdout, _) = stdio.split();
22
23
24 let (commands, rl_writer) = async_readline::init(stdin, stdout);
25
26 let acc1 = Rc::new(RefCell::new(0));
27 let acc2 = acc1.clone();
28 let acc3 = acc1.clone();
29 let connected1 = Rc::new(RefCell::new(false));
30 let connected2 = connected1.clone();
31 let connected3 = connected1.clone();
32
33 let done = commands
34 .map(move |line| {
35 *connected1.borrow_mut() = false;
36 *acc1.borrow_mut() = 0;
37
38 let mut v = vec!();
39 let _ = write!(v, "\n> ");
40 v.append(&mut line.line.clone());
41 v
42 })
43 .select(
44 periodic_timer1
45 .map(|_| {
46 let mut v = vec!();
47 if *connected2.borrow() {
48 *acc2.borrow_mut() += 1;
49 let _ = write!(v, "\nFiles ready: {} ", *acc2.borrow());
50 }
51 v
52 })
53 )
54 .select(
55 periodic_timer2.map(|_| {
56 let mut v = vec!();
57 if !*connected3.borrow() {
58 *acc3.borrow_mut() += 1;
59 if *acc3.borrow() > 3 {
60 let _ = write!(v, "\nConnected!");
61 *acc3.borrow_mut() = 0;
62 *connected3.borrow_mut() = true;
63 } else {
64 let _ = write!(v, "\nConnecting... ");
65 }
66 } else if *acc3.borrow() > 10 {
67 let _ = write!(v, "Disconnecting... ");
68 *acc3.borrow_mut() = 0;
69 *connected3.borrow_mut() = false;
70 } else if *acc3.borrow() > 5 {
71 let _ = write!(v, "Error... ");
72 }
73
74 v
75 })
76 )
77 .forward(rl_writer);
78
79 l.run(done).unwrap();
80}