diff --git a/lib/roles/app.js b/lib/roles/app.js index b6761d9a..8f173802 100644 --- a/lib/roles/app.js +++ b/lib/roles/app.js @@ -169,10 +169,10 @@ module.exports = function(options) { , group = socket.handshake.user.group var messageListener = wirerouter() - .on(wire.MessageType.JOIN_GROUP, function(channel, message) { + .on(wire.JoinGroupMessage, function(channel, message) { socket.emit('join', message) }) - .on(wire.MessageType.LEAVE_GROUP, function(channel, message) { + .on(wire.LeaveGroupMessage, function(channel, message) { socket.emit('leave', message) }) .handler() diff --git a/lib/roles/device.js b/lib/roles/device.js index 5d48189d..83e10210 100644 --- a/lib/roles/device.js +++ b/lib/roles/device.js @@ -328,12 +328,12 @@ module.exports = function(options) { }) sub.on('message', wirerouter() - .on(wire.MessageType.ProbeMessage, function(channel, message) { + .on(wire.ProbeMessage, function(channel, message) { push.send([channel, wireutil.makeDeviceIdentityMessage(options.serial, identity)]) channels.keepalive(channel) }) - .on(wire.MessageType.GroupMessage, function(channel, message) { + .on(wire.GroupMessage, function(channel, message) { var groupChannel = message.channel if (devutil.matchesRequirements(identity, message.requirements)) { channels.register(groupChannel, message.timeout) @@ -344,7 +344,7 @@ module.exports = function(options) { } channels.keepalive(channel) }) - .on(wire.MessageType.UngroupMessage, function(channel, message) { + .on(wire.UngroupMessage, function(channel, message) { var groupChannel = message.channel if (devutil.matchesRequirements(identity, message.requirements)) { channels.unregister(groupChannel) @@ -355,7 +355,7 @@ module.exports = function(options) { } channels.keepalive(channel) }) - .on(wire.MessageType.ShellCommandMessage, function(channel, message) { + .on(wire.ShellCommandMessage, function(channel, message) { log.info('Running shell command "%s"', message.command.join(' ')) adb.shellAsync(options.serial, message.command) .then(function(stream) { diff --git a/lib/roles/notify/hipchat.js b/lib/roles/notify/hipchat.js index efc58ca4..3b558571 100644 --- a/lib/roles/notify/hipchat.js +++ b/lib/roles/notify/hipchat.js @@ -29,7 +29,7 @@ module.exports = function(options) { }) sub.on('message', wirerouter() - .on(wire.MessageType.DeviceLogMessage, function(channel, message) { + .on(wire.DeviceLogMessage, function(channel, message) { if (message.priority >= options.priority) { buffer.push(message) clearTimeout(timer) diff --git a/lib/roles/processor.js b/lib/roles/processor.js index 90ba6fba..d9032c97 100644 --- a/lib/roles/processor.js +++ b/lib/roles/processor.js @@ -32,32 +32,32 @@ module.exports = function(options) { }) devDealer.on('message', wirerouter() - .on(wire.MessageType.JoinGroupMessage, function(channel, message, data) { + .on(wire.JoinGroupMessage, function(channel, message, data) { appDealer.send([channel, data]) }) - .on(wire.MessageType.LeaveGroupMessage, function(channel, message, data) { + .on(wire.LeaveGroupMessage, function(channel, message, data) { appDealer.send([channel, data]) }) - .on(wire.MessageType.DeviceLogMessage, function(channel, message, data) { + .on(wire.DeviceLogMessage, function(channel, message, data) { dbapi.saveDeviceLog(message.serial, message) appDealer.send([channel, data]) }) - .on(wire.MessageType.DevicePokeMessage, function(channel, message) { + .on(wire.DevicePokeMessage, function(channel, message) { devDealer.send([message.channel, wireutil.makeProbeMessage()]) }) - .on(wire.MessageType.DeviceIdentityMessage, function(channel, message) { + .on(wire.DeviceIdentityMessage, function(channel, message) { dbapi.saveDeviceIdentity(message.serial, message) }) - .on(wire.MessageType.DeviceStatusMessage, function(channel, message) { + .on(wire.DeviceStatusMessage, function(channel, message) { dbapi.saveDeviceStatus(message.serial, message) }) - .on(wire.MessageType.DeviceShellCommandDataMessage, function(channel, message, data) { + .on(wire.ShellCommandDataMessage, function(channel, message, data) { appDealer.send([channel, data]) }) - .on(wire.MessageType.DeviceShellCommandDoneMessage, function(channel, message, data) { + .on(wire.ShellCommandDoneMessage, function(channel, message, data) { appDealer.send([channel, data]) }) - .on(wire.MessageType.DeviceShellCommandFailMessage, function(channel, message, data) { + .on(wire.ShellCommandFailMessage, function(channel, message, data) { appDealer.send([channel, data]) }) .handler()) diff --git a/lib/wire/index.js b/lib/wire/index.js index c2d08f03..3e572a0e 100644 --- a/lib/wire/index.js +++ b/lib/wire/index.js @@ -7,7 +7,9 @@ var wire = ProtoBuf.loadProtoFile(path.join(__dirname, 'wire.proto')).build() wire.ReverseMessageType = Object.keys(wire.MessageType) .reduce( function(acc, type) { - acc[wire.MessageType[type]] = type + var code = wire.MessageType[type] + wire[type].$code = wire[type].prototype.$code = code + acc[code] = type return acc } , Object.create(null) diff --git a/lib/wire/router.js b/lib/wire/router.js index bc808aa2..4f7ff53b 100644 --- a/lib/wire/router.js +++ b/lib/wire/router.js @@ -1,4 +1,4 @@ -var events = require('events') +var EventEmitter = require('events').EventEmitter var util = require('util') var wire = require('./') @@ -9,10 +9,22 @@ function Router() { return new Router() } - events.EventEmitter.call(this) + EventEmitter.call(this) } -util.inherits(Router, events.EventEmitter) +util.inherits(Router, EventEmitter) + +Router.prototype.on = function(message, handler) { + return EventEmitter.prototype.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) { diff --git a/lib/wire/util.js b/lib/wire/util.js index 638b221a..37d28279 100644 --- a/lib/wire/util.js +++ b/lib/wire/util.js @@ -17,11 +17,11 @@ var wireutil = { , absent: 'ABSENT' }[type]] } -, envelope: function(type, message) { - return new wire.Envelope(type, message.encode()).encodeNB() +, envelope: function(message) { + return new wire.Envelope(message.$code, message.encode()).encodeNB() } , makeDeviceLogMessage: function(serial, entry) { - var message = new wire.DeviceLogMessage( + return wireutil.envelope(new wire.DeviceLogMessage( serial , entry.timestamp / 1000 , entry.priority @@ -29,37 +29,38 @@ var wireutil = { , entry.pid , entry.message , entry.identifier - ) - - return wireutil.envelope(wire.MessageType.DeviceLogMessage, message) + )) } , makeGroupMessage: function(channel, timeout, requirements) { - var message = new wire.GroupMessage( + return wireutil.envelope(new wire.GroupMessage( channel , timeout , requirements - ) - - return wireutil.envelope(wire.MessageType.GroupMessage, message) + )) } , makeUngroupMessage: function(requirements) { - var message = new wire.UngroupMessage(requirements) - return wireutil.envelope(wire.MessageType.UngroupMessage, message) + return wireutil.envelope(new wire.UngroupMessage( + requirements + )) } , makeJoinGroupMessage: function(serial) { - var message = new wire.JoinGroupMessage(serial) - return wireutil.envelope(wire.MessageType.JoinGroupMessage, message) + return wireutil.envelope(new wire.JoinGroupMessage( + serial + )) } , makeLeaveGroupMessage: function(serial) { - var message = new wire.LeaveGroupMessage(serial) - return wireutil.envelope(wire.MessageType.LeaveGroupMessage, message) + return wireutil.envelope(new wire.LeaveGroupMessage( + serial + )) } , makeDevicePokeMessage: function(serial, channel) { - var message = new wire.DevicePokeMessage(serial, channel) - return wireutil.envelope(wire.MessageType.DevicePokeMessage, message) + return wireutil.envelope(new wire.DevicePokeMessage( + serial + , channel + )) } , makeDeviceIdentityMessage: function(serial, identity) { - var message = new wire.DeviceIdentityMessage( + return wireutil.envelope(new wire.DeviceIdentityMessage( serial , identity.platform , identity.manufacturer @@ -80,60 +81,49 @@ var wireutil = { , identity.display.secure , identity.display.url ) - ) - - return wireutil.envelope(wire.MessageType.DeviceIdentityMessage, message) + )) } , makeDevicePropertiesMessage: function(serial, properties) { - var message = new wire.DevicePropertiesMessage( + return wireutil.envelope(new wire.DevicePropertiesMessage( serial , Object.keys(properties).map(function(key) { return new wire.DeviceProperty(key, properties[key]) }) - ) - - return wireutil.envelope( - wire.MessageType.DevicePropertiesMessage - , message - ) + )) } , makeDeviceStatusMessage: function(serial, type, provider) { - var message = new wire.DeviceStatusMessage( + return wireutil.envelope(new wire.DeviceStatusMessage( serial , wireutil.toDeviceStatus(type) , provider - ) - - return wireutil.envelope(wire.MessageType.DeviceStatusMessage, message) + )) } , makeProbeMessage: function() { - var message = new wire.ProbeMessage() - return wireutil.envelope(wire.MessageType.ProbeMessage, message) + return wireutil.envelope(new wire.ProbeMessage()) } , makeShellCommandMessage: function(channel, command) { - var message = new wire.ShellCommandMessage(channel, command) - return wireutil.envelope(wire.MessageType.ShellCommandMessage, message) + return wireutil.envelope(new wire.ShellCommandMessage( + channel + , command + )) } , makeShellCommandDataMessage: function(serial, seq, chunk) { - var message = new wire.ShellCommandDataMessage(serial, seq, chunk) - return wireutil.envelope( - wire.MessageType.ShellCommandDataMessage - , message - ) + return wireutil.envelope(new wire.ShellCommandDataMessage( + serial + , seq + , chunk + )) } , makeShellCommandDoneMessage: function(serial) { - var message = new wire.ShellCommandDoneMessage(serial) - return wireutil.envelope( - wire.MessageType.ShellCommandDoneMessage - , message - ) + return wireutil.envelope(new wire.ShellCommandDoneMessage( + serial + )) } , makeShellCommandFailMessage: function(serial, reason) { - var message = new wire.ShellCommandFailMessage(serial, reason) - return wireutil.envelope( - wire.MessageType.ShellCommandFailMessage - , message - ) + return wireutil.envelope(new wire.ShellCommandFailMessage( + serial + , reason + )) } } diff --git a/lib/wire/wire.proto b/lib/wire/wire.proto index 53952b77..c9c688f0 100644 --- a/lib/wire/wire.proto +++ b/lib/wire/wire.proto @@ -132,17 +132,17 @@ message ShellCommandMessage { repeated string command = 2; } -message DeviceDataMessage { +message ShellCommandDataMessage { required string serial = 1; required uint32 seq = 2; required bytes data = 3; } -message DeviceDoneMessage { +message ShellCommandDoneMessage { required string serial = 1; } -message DeviceFailMessage { +message ShellCommandFailMessage { required string serial = 1; required string reason = 2; }