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