var crypto = require('crypto') var syrup = require('stf-syrup') var logger = require('../../../util/logger') var wire = require('../../../wire') var wireutil = require('../../../wire/util') module.exports = syrup.serial() .dependency(require('../support/sub')) .dependency(require('../support/push')) .dependency(require('../support/router')) .dependency(require('./identity')) .define(function(options, sub, push, router, identity) { var log = logger.createLogger('device:plugins:solo') // The channel should keep the same value between restarts, so that // having the client side up to date all the time is not horribly painful. function makeChannelId() { var hash = crypto.createHash('sha1') hash.update(options.serial) return hash.digest('base64') } var channel = makeChannelId() log.info('Subscribing to permanent channel "%s"', channel) sub.subscribe(channel) router.on(wire.ProbeMessage, function() { push.send([ wireutil.global , wireutil.envelope(new wire.DeviceIdentityMessage( options.serial , identity.platform , identity.manufacturer , identity.operator , identity.model , identity.version , identity.abi , identity.sdk , new wire.DeviceDisplayMessage(identity.display) , new wire.DevicePhoneMessage(identity.phone) , identity.product )) ]) }) return { channel: channel , poke: function() { push.send([ wireutil.global , wireutil.envelope(new wire.DevicePokeMessage( options.serial , channel )) ]) } } })