meshblu-server-websocket
Version:
Websocket Protocol Adapter for Meshblu
95 lines (80 loc) • 2.73 kB
text/coffeescript
_ = require 'lodash'
MeshbluWebsocket = require 'meshblu-websocket'
async = require 'async'
uuid = require 'uuid'
redis = require 'ioredis'
RedisNS = require '@octoblu/redis-ns'
JobManager = require 'meshblu-core-job-manager'
Server = require '../src/server'
UpstreamMeshbluServer = require './upstream-meshblu-server'
class Connect
constructor: ({}={}) ->
= new JobManager
client: _.bindAll new RedisNS 'ns', redis.createClient()
timeoutSeconds: 1
connect: (callback) =>
async.series [
], (error) =>
return callback error if error?
callback null,
sut:
connection:
upstreamSocket:
device: {uuid: 'masseuse', token: 'assassin'}
jobManager: new JobManager
client: _.bindAll new RedisNS 'ns', redis.createClient()
timeoutSeconds: 1
shutItDown: (callback) =>
.close()
async.series [
async.apply .stop
async.apply .stop
], callback
startServer: (callback) =>
= new Server
port: 0xcafe
jobTimeoutSeconds: 1
meshbluConfig:
hostname: 'localhost'
protocol: 'http'
port: 0xbabe
jobLogRedisUri: 'redis://localhost:6379'
redisUri: 'redis://localhost:6379'
namespace: 'ns'
.run callback
startUpstream: (callback) =>
= sinon.spy()
= new UpstreamMeshbluServer onConnection: , port: 0xbabe
.start callback
createConnection: (callback) =>
= new MeshbluWebsocket
hostname: 'localhost'
port: 0xcafe
uuid: 'masseuse'
token: 'assassin'
protocol: 'http'
.on 'notReady', (error) => throw error
.on 'error', (error) => throw error
.connect =>
callback()
authenticateConnection: (callback) =>
.getRequest ['request'], (error, ) =>
return callback error if error?
response =
metadata:
responseId: .metadata.responseId
code: 204
.createResponse 'response', response, callback
authenticateUpstreamConnection: (callback) =>
onUpstreamConnectionCalled = => .called
wait = (callback) => _.delay callback, 10
async.until onUpstreamConnectionCalled, wait, =>
[] = .firstCall.args
.send JSON.stringify(['ready'])
callback()
module.exports = Connect