all files / node-meshblu-firehose-socket.io/src/ firehose-socket-io.coffee

79.17% Statements 19/24
50% Branches 5/10
100% Functions 7/7
100% Lines 19/19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36                                  
SocketIOClient = require 'socket.io-client'
EventEmitter2  = require 'eventemitter2'
URL            = require 'url'
 
class MeshbluFirehoseSocketIO extends EventEmitter2
  constructor: ({@meshbluConfig}) ->
    Ithrow new Error('MeshbluFirehoseSocketIO: meshbluConfig.uuid is required') unless @meshbluConfig.uuid?
    Ithrow new Error('MeshbluFirehoseSocketIO: meshbluConfig.token is required') unless @meshbluConfig.token?
    Ithrow new Error('MeshbluFirehoseSocketIO: meshbluConfig.hostname is required') unless @meshbluConfig.hostname?
    Ithrow new Error('MeshbluFirehoseSocketIO: meshbluConfig.port is required') unless @meshbluConfig.port?
    Ithrow new Error('MeshbluFirehoseSocketIO: meshbluConfig.protocol is required') unless @meshbluConfig.protocol?
 
  connect: =>
    options =
      extraHeaders:
        'X-Meshblu-UUID': @meshbluConfig.uuid
        'X-Meshblu-Token': @meshbluConfig.token
 
    @socket = SocketIOClient @url(), options
    @socket.on 'connect', =>
      @emit 'connect'
 
    @socket.on 'disconnect', =>
      @emit 'disconnect'
 
    @socket.on 'message', (message) =>
      @emit 'message', message
 
  url: =>
    URL.format
      hostname: @meshbluConfig.hostname
      port: @meshbluConfig.port
      protocol: @meshbluConfig.protocol
 
module.exports = MeshbluFirehoseSocketIO