1extern crate mio;
2extern crate mio_extras;
3extern crate bytes;
4
5#[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}