web_multibar.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. multi.charm.reset();
  8. var bars = [];
  9. var progress = [];
  10. var deltas = [];
  11. for (var i = 0; i < 5; i++) {
  12. var s = 'ABCDE'[i] + ': \n';
  13. multi.write(s);
  14. var bar = multi(s.length, i + 1, {
  15. width : 20,
  16. solid : {
  17. text : '|',
  18. foreground : 'white',
  19. background : 'blue'
  20. },
  21. empty : { text : ' ' },
  22. });
  23. bars.push(bar);
  24. deltas[i] = 1 + Math.random() * 9;
  25. progress.push(0);
  26. }
  27. multi.write('\nbeep boop\n');
  28. var pending = progress.length;
  29. var iv = setInterval(function () {
  30. progress.forEach(function (p, i) {
  31. progress[i] += Math.random() * deltas[i];
  32. bars[i].percent(progress[i]);
  33. if (p < 100 && progress[i] >= 100) pending --;
  34. if (pending === 0) {
  35. multi.write('\nAll done.\n');
  36. res.end();
  37. }
  38. });
  39. }, 100);
  40. res.connection.on('end', function () {
  41. multi.destroy();
  42. clearInterval(iv);
  43. });
  44. }).listen(8080);
  45. console.log('curl -N localhost:8080');