noders/
lib.rs

1extern crate mio;
2extern crate mio_extras;
3extern crate bytes;
4
5// Same as an mio token, but exported to downstream libraries
6#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
7pub struct Token (pub usize);
8impl Into<mio::Token> for Token { fn into(self) -> mio::Token { mio::Token(self.0) } }
9impl From<mio::Token> for Token { fn from(val: mio::Token) -> Token { Token(val.0) } }
10impl Into<usize> for Token { fn into(self) -> usize { self.0 } }
11impl From<usize> for Token { fn from(val: usize) -> Token { Token(val) } }
12
13#[macro_use] pub mod macros_internal;
14#[macro_use] pub mod macros;
15pub mod node;
16pub mod callback;
17pub mod time;
18pub mod dgram;
19
20pub fn module() -> node::ModuleCfg { node::module() }
21
22#[cfg(test)]
23mod tests2 {
24    use node::module;
25    use time::set_timeout;
26
27    #[test]
28    fn test() {
29        module().run((), |s| {
30            set_timeout(s,|_,_|{
31                println!("Hello1");
32            }, 100);
33        });
34    }
35}
36
37#[cfg(test)]
38mod tests {
39    use super::Token;
40    use node::{ Loop, module };
41    use time::{ set_timeout, set_interval, clear_timeout };
42    use dgram::*;
43
44    struct MyObj {
45        i: u32
46    }
47    impl MyObj {
48        fn object_method(&mut self) {
49            println!("Hello {}", self.i);
50            self.i += 1;
51        }
52    }
53
54    fn my_function<X:Loop<X>>(_x: &mut X, _:Token)
55    {
56        println!("Plain old function");
57    }
58
59    #[test]
60    fn test_udp() {
61        const PORT: u16 = 6666;
62        module().run((), |s| {
63            let sock = create_socket("udp4").unwrap().bind((PORT, "0.0.0.0")).unwrap();
64            let sock2 = create_socket("udp4").unwrap().bind("0.0.0.0").unwrap();
65            s.with_scope(rec!{
66                sock: sock,
67                sock2: sock2
68            }, |s| {
69                s.sock.on_message(s, |s,msg|{
70                    println!("Received message! {:?} from {:?}", msg.buf, msg.sa);
71                    s.sock.close();
72                });
73                s.sock2.send_to(s, "Hello world!", (PORT, "127.0.0.1"), |s,_|{
74                    s.sock2.close();
75                });
76            });
77        });
78    }
79
80    #[test]
81    fn test_udp_thread() {
82        const PORT: u16 = 6667;
83        module().run((), |s| {
84            s.module().new_thread(true).run((),|s|{
85                let sock = create_socket("udp4").unwrap().bind((PORT, "0.0.0.0")).unwrap();
86                s.with_scope(rec!{
87                    sock: sock
88                }, |s| {
89                    s.sock.on_message(s, |s,msg|{
90                        println!("Received message! {:?} from {:?}", msg.buf, msg.sa);
91                        s.sock.close();
92                    });
93                });
94            });
95
96            s.module().new_thread(true).run((),|s|{
97                let sock2 = create_socket("udp4").unwrap().bind("0.0.0.0").unwrap();
98                s.with_scope(rec!{
99                    sock2: sock2
100                }, |s| {
101                    s.sock2.send_to(s, "Hello world!", (PORT, "127.0.0.1"), |s,_|{
102                        s.sock2.close();
103                    });
104                });
105            });
106        });
107    }
108
109    #[test]
110    fn test_main() {
111        println!("hi");
112        module().run((1,2,3),|s| {
113            println!("here {}", s.2);
114            set_timeout(s,|_,_|{ println!("Hello1"); }, 100);
115
116            s.with_scope(rec!{
117                i: 0,
118                x: Token(0)
119            },|s|{
120                s.i = 300;
121                set_timeout(s,|s,_|{
122                    println!("Hello world! {}", s.i);
123                    s.i += 1;
124                }, 150);
125                set_timeout(s,|s,_|{
126                    println!("Hello again! {}", s.i);
127                    s.i += 1;
128                }, 160);
129
130                s.with_scope(MyObj {
131                    i: 33
132                },|s|{
133                    set_timeout(s,|s,_|{ s.object_method() }, 500);
134                    println!("s.i = {}", s.i);
135                    println!("s.p().i = {}", s.p().i);
136                });
137
138                s.x = set_interval(s, my_function, 50);
139                set_timeout(s,|s,_|{ clear_timeout(s, s.x); }, 1000);
140
141                s.module().new_thread(true).run(rec!{
142                    i: 21,
143                    x: Token(0)
144                },|s|{
145                    println!("Hi hi {}", s.i);
146                    s.x = set_interval(s,|s,_|{
147                        s.i += 1;
148                        println!("s.i = {}", s.i);
149                        if s.i > 50 {
150                            clear_timeout(s,s.x);
151                        }
152                    }, 100);
153                })
154            });
155        });
156    }
157}