ickyrr-gagarin
Version:
A current updated fork of gagarin
75 lines (58 loc) • 2.02 kB
JavaScript
var DDPClient = require('ddp');
var Promise = require('es6-promise').Promise;
module.exports = function createDDPClientManager () {
"use strict";
var self = this;
var ddpClient = null;
var ddpClientPromise = null;
var code = null;
var port = null;
var host = null;
return function getDDPClient (setup) {
if (code === setup.code && port === setup.port && ddpClientPromise) {
return ddpClientPromise;
}
code = setup.code;
port = setup.port;
host = setup.hostname || 'localhost';
ddpClientPromise = new Promise(function (resolve, reject) {
ddpClient && ddpClient.close();
ddpClient = new DDPClient({
host : host,
port : port,
path : "websocket",
ssl : false,
//-------------------------
autoReconnect : true,
autoReconnectTimer : 500,
maintainCollections : true,
ddpVersion : '1'
});
var retryCount = 5;
// XXX we need this because the WebApp.httpServer may start with some delay;
// in fact, this should be handled within the app itself
(function tryConnect() {
ddpClient.connect(function (err, wasReconnected) {
if (err) {
if (retryCount <= 0) {
reject(typeof err === 'string' ? new Error(err) : err);
} else if (!wasReconnected) {
retryCount -= 1;
setTimeout(tryConnect, 500);
}
} else {
resolve(ddpClient);
}
});
})();
// TODO: re-enable this feature when we make timeout configurable
//setTimeout(function () {
// reject(new Error('timeout while waiting to establish ddp connection'));
//}, 2000);
//-------------------------------------------------------------
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
//-------------------------------------------------------------
});
return ddpClientPromise;
};
};