I'm not sure why this doesn't work. Can someone clue me in? I don't see any events get logged, but they do get emitted...well, I think :)
{EventEmitter} = require 'events'
class Base extends EventEmitter
class App extends Base
constructor: (cb) ->
console.log 'setup'
@on 'listener:1', (data) ->
console.log 'listener 1: ' + data
@on 'listener:2', (data) ->
console.log 'listener 2: ' + data
cb()
class One extends Base
fire: () ->
console.log 'fire 1'
@emit 'listener:1', 1
class Two extends Base
fire: () ->
console.log 'fire 2'
@emit 'listener:2', 2
new App(
() ->
setTimeout (->
one = new One()
one.fire()
setTimeout (->
two = new Two()
two.fire()
), 2000
), 2000
)
The output of the program is as expected; Only App sets up listeners on itself, but it never emits anything (only One and Two, which are not sublcasses of App, do so). Perhaps you're looking for something more like the following?
{EventEmitter} = require 'events'
class Base extends EventEmitter
constructor: ->
console.log 'setup'
@on 'listener:1', (data) ->
console.log 'listener 1: ' + data
@on 'listener:2', (data) ->
console.log 'listener 2: ' + data
class App extends Base
constructor: (cb) ->
super()
cb()
class One extends Base
fire: ->
console.log 'fire 1'
@emit 'listener:1', 1
class Two extends Base
fire: ->
console.log 'fire 2'
@emit 'listener:2', 2
new App(
->
setTimeout (->
one = new One()
one.fire()
setTimeout (->
two = new Two()
two.fire()
), 2000
), 2000
)