blob: 840ebfd029a8fb76cdbb7224f8b638021111c769 [file] [log] [blame]
var EventEmitter = require('eventemitter3').EventEmitter
var util = require('util')
var wire = require('./')
var log = require('../util/logger').createLogger('wire:router')
var on = EventEmitter.prototype.on
function Router() {
if (!(this instanceof Router)) {
return new Router()
}
EventEmitter.call(this)
}
util.inherits(Router, EventEmitter)
Router.prototype.on = function(message, handler) {
return on.call(this, message.$code, handler)
}
Router.prototype.removeListener = function(message, handler) {
return EventEmitter.prototype.removeListener.call(
this
, message.$code
, handler
)
}
Router.prototype.handler = function() {
return function(channel, data) {
var wrapper = wire.Envelope.decode(data)
var type = wire.ReverseMessageType[wrapper.type]
if (type) {
this.emit(
wrapper.type
, wrapper.channel || channel
, wire[type].decode(wrapper.message)
, data
)
this.emit(
'message'
, channel
)
}
else {
log.warn(
'Unknown message type "%d", perhaps we need an update?'
, wrapper.type
)
}
}.bind(this)
}
module.exports = Router