web_multirel.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. var http = require('http');
  2. var multimeter = require('multimeter');
  3. http.createServer(function (req, res) {
  4. res.setHeader('content-type', 'application/octet-stream');
  5. var multi = multimeter(res);
  6. multi.charm.on('^C', process.exit);
  7. var bars = [];
  8. var progress = [];
  9. var deltas = [];
  10. for (var i = 0; i < 5; i++) {
  11. var s = 'ABCDE'[i] + ': \n';
  12. multi.write(s);
  13. var bar = multi.rel(4, i, {
  14. width : 20,
  15. solid : {
  16. text : '|',
  17. foreground : 'white',
  18. background : 'blue'
  19. },
  20. empty : { text : ' ' },
  21. });
  22. bars.push(bar);
  23. deltas[i] = 5 + Math.random() * 10;
  24. progress.push(0);
  25. }
  26. multi.offset += 2;
  27. multi.write('\nbeep');
  28. setTimeout(function () {
  29. multi.offset ++;
  30. multi.write('\n boop');
  31. }, 1000);
  32. var pending = progress.length;
  33. var iv = setInterval(function () {
  34. progress.forEach(function (p, i) {
  35. progress[i] += Math.random() * deltas[i];
  36. bars[i].percent(progress[i]);
  37. if (p < 100 && progress[i] >= 100) pending --;
  38. if (pending === 0) {
  39. multi.write('\nAll done.\n');
  40. res.end();
  41. }
  42. });
  43. }, 100);
  44. res.connection.on('end', function () {
  45. multi.destroy();
  46. clearInterval(iv);
  47. });
  48. }).listen(8080);
  49. console.log('curl -N localhost:8080');