This library provides an easy way to send events to a web browser (or any other client) over HTTP.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. var crypto = require("crypto");
  2. function Listener() {
  3. var self = {}
  4. var key = crypto.randomBytes(16).toString("hex");
  5. self.key = key;
  6. var events = [];
  7. var waiter = null;
  8. function respond() {
  9. waiter.end(JSON.stringify(events));
  10. waiter = null;
  11. events = [];
  12. }
  13. self.emit = function(name, args) {
  14. events.push({ name: name, args: args });
  15. if (waiter != null) {
  16. respond();
  17. }
  18. }
  19. self.handle = function(res) {
  20. waiter = res;
  21. if (events.length > 0) {
  22. respond();
  23. }
  24. }
  25. return self;
  26. }
  27. function WebEvents() {
  28. var self = {}
  29. var listeners = {};
  30. self.emit = function(name, args) {
  31. for (var i in listeners) {
  32. listeners[i].emit(name, args);
  33. }
  34. }
  35. self.handle = function(req, res) {
  36. var parts = req.url.substring(1).split("/");
  37. if (parts[0] !== "webevents")
  38. return;
  39. res.writeHead(200, { "content-type": "application/json" });
  40. if (parts[1] === "register") {
  41. var listener = Listener();
  42. listeners[listener.key] = listener;
  43. res.end(JSON.stringify({ key: listener.key }));
  44. } else if (parts[1] === "await") {
  45. var listener = listeners[parts[2]];
  46. if (!listener) {
  47. res.end(JSON.stringify({
  48. error: "ENOTREGISTERED"
  49. }));
  50. return;
  51. }
  52. listener.handle(res);
  53. }
  54. }
  55. return self
  56. }
  57. module.exports = WebEvents;