Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

index.js 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. var spawn = require("child_process").spawn;
  2. var child = spawn(__dirname+"/udev-monitor");
  3. exports.list = list;
  4. exports.monitor = monitor;
  5. exports.unmonitor = unmonitor;
  6. exports.exit = exit;
  7. var currstr = "";
  8. child.stdout.setEncoding("utf8");
  9. child.stdout.on("data", d => {
  10. var lines = d.toString().split("\n");
  11. currstr += lines[0];
  12. if (lines.length === 1)
  13. return;
  14. ondata(JSON.parse(currstr));
  15. for (var i = 1; i < lines.length -1; ++i) {
  16. ondata(JSON.parse(lines[i]));
  17. }
  18. currstr = lines[lines.length - 1];
  19. });
  20. child.stderr.on("data", d => console.error(d.toString()));
  21. var listq = [];
  22. var monitors = {};
  23. function ondata(obj) {
  24. if (obj instanceof Array) {
  25. if (listq.length === 0)
  26. return;
  27. var cb = listq.shift();
  28. cb(obj);
  29. } else {
  30. var ss = obj.SUBSYSTEM;
  31. if (monitors[ss]) {
  32. monitors[ss].forEach(cb => cb(obj));
  33. }
  34. if (monitors["*"]) {
  35. monitors["*"].forEach(cb => cb(obj));
  36. }
  37. }
  38. }
  39. function list(ss, cb) {
  40. listq.push(cb);
  41. child.stdin.write("list:"+ss+"\n");
  42. }
  43. function monitor(ss, cb) {
  44. if (monitors[ss] == null) {
  45. child.stdin.write("monitor:"+ss+"\n");
  46. monitors[ss] = [];
  47. }
  48. monitors[ss].push(cb);
  49. }
  50. function unmonitor(ss, cb) {
  51. if (monitors[ss] == null)
  52. throw new Error("Callback function for "+ss+" not registered");
  53. var removed = false;
  54. for (var i in monitors[ss]) {
  55. if (monitors[ss][i] === cb) {
  56. monitors[ss].splice(i, 1);
  57. removed = true;
  58. }
  59. }
  60. }
  61. function exit() {
  62. child.kill("SIGTERM");
  63. }