1 | {EventEmitter2} = require 'eventemitter2'
|
2 |
|
3 | class MultiHydrantManager extends EventEmitter2
|
4 | constructor: ({@client, @uuidAliasResolver}) ->
|
5 | throw new Error('MultiHydrantManager: client is required') unless @client?
|
6 | throw new Error('MultiHydrantManager: uuidAliasResolver is required') unless @uuidAliasResolver?
|
7 |
|
8 | connect: (callback) =>
|
9 | @client.once 'ready', =>
|
10 | @client.on 'message', @_onMessage
|
11 | callback()
|
12 | callback = ->
|
13 |
|
14 | @client.once 'error', (error) =>
|
15 | callback error
|
16 | callback = ->
|
17 |
|
18 | subscribe: ({uuid}, callback) =>
|
19 | @uuidAliasResolver.resolve uuid, (error, uuid) =>
|
20 | return callback error if error?
|
21 | @client.subscribe uuid, callback
|
22 |
|
23 | close: =>
|
24 | if @client.disconnect?
|
25 | @client.quit()
|
26 | @client.disconnect false
|
27 | return
|
28 | @client.end true
|
29 |
|
30 | _onMessage: (channel, messageStr) =>
|
31 | try
|
32 | message = JSON.parse messageStr
|
33 | catch
|
34 | @emit 'error', 'Error: unable to parse message'
|
35 | return
|
36 |
|
37 | @emit 'message', channel, message
|
38 |
|
39 | module.exports = MultiHydrantManager
|