From d8062e0b34e95b5aa1a4b9937751f4b7abb4c312 Mon Sep 17 00:00:00 2001 From: ewilson / iamruinous Date: Fri, 10 Mar 2017 17:56:01 -0700 Subject: [PATCH] v3.0.0 connect is now event driven and does not take a callback --- package.json | 2 +- src/firehose-socket-io.coffee | 33 ++++++++++++++++++++--------- test/firehose-socket-io-spec.coffee | 15 ++++++++----- test/resolve-srv-spec.coffee | 3 ++- webpack.config.lib.js | 3 +-- 5 files changed, 37 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index fa60f81..6aae1e3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "meshblu-firehose-socket.io", - "version": "2.2.0", + "version": "3.0.0", "description": "Meshblu Firehose Client for socket.io", "main": "index.js", "browser": { diff --git a/src/firehose-socket-io.coffee b/src/firehose-socket-io.coffee index 8f8eae9..4902e75 100644 --- a/src/firehose-socket-io.coffee +++ b/src/firehose-socket-io.coffee @@ -54,11 +54,13 @@ class MeshbluFirehoseSocketIO extends EventEmitter2 @meshbluConfig = {uuid, token, resolveSrv, protocol, hostname, port, service, domain, secure} - connect: (callback) => - callback = _.once callback + connect: => + @emit 'connecting' @_resolveBaseUrl (error, baseUrl) => - return callback error if error? + if error? + @emit 'resolve-base-url:error', error + return @_reconnect() options = path: "/socket.io/v1/#{@meshbluConfig.uuid}" @@ -72,23 +74,34 @@ class MeshbluFirehoseSocketIO extends EventEmitter2 transports: @transports @socket = SocketIOClient baseUrl, options + @socket.once 'identify', => @emit 'error', new Error(WRONG_SERVER_ERROR) + @socket.once 'connect', => @backoff.reset() - callback() - @socket.once 'connect_error', => - return callback error unless @srvFailover? - @srvFailover.markBadUrl baseUrl, ttl: 60000 - _.delay @connect, @backoff.duration(), callback + @emit 'connect' + + @socket.once 'disconnect', => + @_reconnect() + + @socket.once 'connect_error', (error) => + @emit 'connect_error', error if error? && !@srvFailover? + @srvFailover.markBadUrl baseUrl, ttl: 60000 if @srvFailover + @_reconnect() + @bindEvents() + _reconnect: (callback=->) => + @emit 'reconnecting' + _.delay @connect, @backoff.duration(), callback + bindEvents: => @socket.on 'message', @_onMessage _.each MeshbluFirehoseSocketIO.EVENTS, (event) => @socket.on event, => @emit event, arguments... - @socket.on 'error', => + @socket.on 'error', (error) => @emit 'socket-io:error', arguments... @socket.on 'close', => @@ -98,8 +111,8 @@ class MeshbluFirehoseSocketIO extends EventEmitter2 @emit 'socket-io:disconnect', arguments... close: (callback) => + @socket.once 'disconnect', callback @socket.disconnect() - callback() _assertNoSrv: ({service, domain, secure}) => throw new Error('domain parameter is only valid when the parameter resolveSrv is true') if domain? diff --git a/test/firehose-socket-io-spec.coffee b/test/firehose-socket-io-spec.coffee index 5f7d7d3..8522c48 100644 --- a/test/firehose-socket-io-spec.coffee +++ b/test/firehose-socket-io-spec.coffee @@ -28,7 +28,8 @@ describe 'MeshbluFirehoseSocketIO', -> {@pathname, @query} = URL.parse @socket.client.request.url, true @uuid = @socket.client.request.headers['x-meshblu-uuid'] @token = @socket.client.request.headers['x-meshblu-token'] - @sut.connect done + @sut.once 'connect', done + @sut.connect() it 'should connect', -> expect(@socket).to.exist @@ -43,7 +44,8 @@ describe 'MeshbluFirehoseSocketIO', -> describe '-> onMessage', -> beforeEach (done) -> @server.on 'connection', (@socket) => - @sut.connect done + @sut.once 'connect', done + @sut.connect() beforeEach (done) -> message = @@ -60,7 +62,8 @@ describe 'MeshbluFirehoseSocketIO', -> describe '-> onTypeFrom', -> beforeEach (done) -> @server.on 'connection', (@socket) => - @sut.connect done + @sut.once 'connect', done + @sut.connect() beforeEach (done) -> message = @@ -77,7 +80,8 @@ describe 'MeshbluFirehoseSocketIO', -> describe '-> onType*', -> beforeEach (done) -> @server.on 'connection', (@socket) => - @sut.connect done + @sut.once 'connect', done + @sut.connect() beforeEach (done) -> message = @@ -94,7 +98,8 @@ describe 'MeshbluFirehoseSocketIO', -> describe '-> onSubType**', -> beforeEach (done) -> @server.on 'connection', (@socket) => - @sut.connect done + @sut.once 'connect', done + @sut.connect() beforeEach (done) -> message = diff --git a/test/resolve-srv-spec.coffee b/test/resolve-srv-spec.coffee index 57be1b9..650be21 100644 --- a/test/resolve-srv-spec.coffee +++ b/test/resolve-srv-spec.coffee @@ -42,7 +42,8 @@ describe 'Meshblu', -> weight: 100 }] @sut.on 'error', done - @sut.connect done + @sut.once 'connect', done + @sut.connect() it 'should get here', -> # getting here is enough diff --git a/webpack.config.lib.js b/webpack.config.lib.js index 613f979..02caf10 100644 --- a/webpack.config.lib.js +++ b/webpack.config.lib.js @@ -14,7 +14,7 @@ module.exports = { module: { loaders: [ { - test: /\.coffee$/, loader: 'coffee', include: /src/ + test: /\.coffee$/, loader: 'coffee-loader', include: /src/ } ] }, @@ -24,7 +24,6 @@ module.exports = { plugins: [ new webpack.IgnorePlugin(/^(buffertools)$/), // unwanted "deeper" dependency new webpack.NoErrorsPlugin(), - new webpack.optimize.OccurenceOrderPlugin(), new webpack.DefinePlugin({ 'process.env': { 'NODE_ENV': JSON.stringify('production')