1 | Net = require('net')
|
2 |
|
3 | Base = require('../base')
|
4 | Connector = require('./connector')
|
5 | Publisher = require('./publisher')
|
6 |
|
7 | debug = Base.logger('polyglot_relay')
|
8 |
|
9 | SOCKET_CONFIG = null
|
10 |
|
11 |
|
12 | exports.start = (socketDef) ->
|
13 | socketOpts = socketDef.split(':')
|
14 | type = socketOpts.shift()
|
15 | if type == 'unix'
|
16 | startUnixSocket(socketOpts[0])
|
17 | else
|
18 | startTcpSocket(socketOpts[0], socketOpts[1])
|
19 |
|
20 | startTcpSocket = (host, port) ->
|
21 | SOCKET_CONFIG = { allowHalfOpen: true, host: host, port: port }
|
22 | startSocket()
|
23 |
|
24 | startUnixSocket = (socketPath) ->
|
25 | SOCKET_CONFIG = { allowHalfOpen: true, path: socketPath }
|
26 | startSocket()
|
27 |
|
28 | startSocket = ->
|
29 | debug('start', SOCKET_CONFIG)
|
30 | exportsInfoJson = ''
|
31 | client = Net.connect SOCKET_CONFIG, ->
|
32 | debug('connected to relay')
|
33 | client.end(JSON.stringify({ IX_DIR: Base.env.IX_DIR }))
|
34 | client.on 'data', (info) ->
|
35 | exportsInfoJson += info.toString()
|
36 | client.on 'end', ->
|
37 | exportsInfo = JSON.parse(exportsInfoJson)
|
38 | debug('exportsInfo', exportsInfo)
|
39 | Publisher.publishExportsAndGetProxy(exportsInfo)
|
40 | .then (data) ->
|
41 | Connector.connectRelayToProxy(data)
|
42 |
|
43 | exports.invoker = (callData, cb_err_data) ->
|
44 | debug('invoker', callData)
|
45 | errDataJson = ''
|
46 | relay = Net.connect SOCKET_CONFIG, ->
|
47 | relay.end(JSON.stringify(callData))
|
48 | relay.on 'data', (data) ->
|
49 | errDataJson += data.toString()
|
50 | relay.on 'end', ->
|
51 | errData = JSON.parse(errDataJson)
|
52 | debug('errData', errData)
|
53 | cb_err_data(errData.err, errData.data)
|
54 | relay.on 'error', (err) ->
|
55 | debug('error', err)
|
56 | cb_err_data(err)
|