1 The event loop keeps running while a task works between two messages. 2 3 -- Testcase -- 4 {% 5 import * as uloop from 'uloop'; 6 7 uloop.init(); 8 9 let ticks = 0, seen = []; 10 11 uloop.timer(20, function() { 12 ticks++; 13 this.set(20); 14 }); 15 16 uloop.task( 17 (pipe) => { 18 pipe.send('first'); 19 sleep(500); 20 21 return 'last'; 22 }, 23 (msg) => { 24 push(seen, [ msg, ticks ]); 25 26 if (msg == 'last') 27 uloop.end(); 28 } 29 ); 30 31 uloop.timer(2000, () => uloop.end()); 32 uloop.run(); 33 34 printf("%J, ticks between: %s\n", map(seen, (m) => m[0]), 35 seen[1][1] - seen[0][1] >= 10); 36 37 uloop.done(); 38 %} 39 -- End -- 40 41 -- Expect stdout -- 42 [ "first", "last" ], ticks between: true 43 -- End -- 44 45 46 Messages larger than the pipe buffer arrive in several reads and are 47 delivered complete and in order. 48 49 -- Testcase -- 50 {% 51 import * as uloop from 'uloop'; 52 53 uloop.init(); 54 55 let seen = []; 56 57 uloop.task( 58 (pipe) => { 59 pipe.send(sprintf('%102400s', '')); 60 pipe.send('sentinel'); 61 pipe.send(sprintf('%4194304s', '')); 62 63 return 'done'; 64 }, 65 (msg) => { 66 push(seen, length(msg) > 8 ? length(msg) : msg); 67 68 if (msg == 'done') 69 uloop.end(); 70 } 71 ); 72 73 uloop.timer(5000, () => uloop.end()); 74 uloop.run(); 75 76 printf("%J\n", seen); 77 78 uloop.done(); 79 %} 80 -- End -- 81 82 -- Expect stdout -- 83 [ 102400, "sentinel", 4194304, "done" ] 84 -- End -- 85 86 87 Input requests are answered in order with the output messages around them. 88 89 -- Testcase -- 90 {% 91 import * as uloop from 'uloop'; 92 93 uloop.init(); 94 95 let seen = [], n = 0; 96 97 uloop.task( 98 (pipe) => { 99 let got = []; 100 101 for (let i = 0; i < 3; i++) { 102 pipe.send(`out ${i}`); 103 push(got, pipe.receive()); 104 } 105 106 return got; 107 }, 108 (msg) => { 109 push(seen, msg); 110 111 if (type(msg) == 'array') 112 uloop.end(); 113 }, 114 () => `in ${n++}` 115 ); 116 117 uloop.timer(2000, () => uloop.end()); 118 uloop.run(); 119 120 printf("%J\n", seen); 121 122 uloop.done(); 123 %} 124 -- End -- 125 126 -- Expect stdout -- 127 [ "out 0", "out 1", "out 2", [ "in 0", "in 1", "in 2" ] ] 128 -- End --
This page was automatically generated by LXR 0.3.1. • OpenWrt