Ein Projekt das es ermöglicht Beerpong über das Internet von zwei unabhängigen positionen aus zu spielen. Entstehung im Rahmen einer Praktikumsaufgabe im Fach Interaktion.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.js 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. module.exports = function first(stuff, done) {
  2. if (!Array.isArray(stuff))
  3. throw new TypeError('arg must be an array of [ee, events...] arrays')
  4. var cleanups = []
  5. for (var i = 0; i < stuff.length; i++) {
  6. var arr = stuff[i]
  7. if (!Array.isArray(arr) || arr.length < 2)
  8. throw new TypeError('each array member must be [ee, events...]')
  9. var ee = arr[0]
  10. for (var j = 1; j < arr.length; j++) {
  11. var event = arr[j]
  12. var fn = listener(event, cleanup)
  13. // listen to the event
  14. ee.on(event, fn)
  15. // push this listener to the list of cleanups
  16. cleanups.push({
  17. ee: ee,
  18. event: event,
  19. fn: fn,
  20. })
  21. }
  22. }
  23. return function (fn) {
  24. done = fn
  25. }
  26. function cleanup() {
  27. var x
  28. for (var i = 0; i < cleanups.length; i++) {
  29. x = cleanups[i]
  30. x.ee.removeListener(x.event, x.fn)
  31. }
  32. done.apply(null, arguments)
  33. }
  34. }
  35. function listener(event, done) {
  36. return function onevent(arg1) {
  37. var args = new Array(arguments.length)
  38. var ee = this
  39. var err = event === 'error'
  40. ? arg1
  41. : null
  42. // copy args to prevent arguments escaping scope
  43. for (var i = 0; i < args.length; i++) {
  44. args[i] = arguments[i]
  45. }
  46. done(err, ee, event, args)
  47. }
  48. }