storage-mule
Version:
The Realtime Framework Cloud Storage Mule utility
74 lines (60 loc) • 2.33 kB
JavaScript
var ibtrealtimesjnode = require('ibtrealtimesjnode').IbtRealTimeSJNode;
var offlineBuffer = require('./OrtcBuffer.js');
var ortcClient = null;
var logger = null;
function authenticate(ortcClient, opts){
var token = require('crypto').randomBytes(12).toString('hex');
var channels = {};
channels['chDebug'] = "w";
ortcClient.saveAuthentication(
opts.ortcCluster, true, token, 0, opts.applicationKey, 1400, opts.privateKey, channels,
function (err, success) {
if(success){
if(opts.logger) opts.logger.info('[storage-mule] Using token: ' + token);
ortcClient.connect(opts.applicationKey, token);
} else {
logger.error('[storage-mule] Save authentication failed' + (err ? ': '+err:''));
setTimeout(authenticate, 1000, ortcClient, opts);
}
}
);
}
module.exports = {
init: function(opts){
if(opts.logger)
logger = opts.logger;
ortcClient = new ibtrealtimesjnode();
ortcClient.setConnectionMetadata('storage-mule');
ortcClient.setClusterUrl(opts.ortcCluster);
ortcClient.onConnected = function (ortc) {
logger && logger.info('[storage-mule] StorageMule connected to ORTC server: '+ ortc.getUrl());
offlineBuffer.process();
};
ortcClient.onException = function (ortc, exception) {
logger && logger.error('[storage-mule] ORTC exception: ' + exception);
if(exception === 'Invalid connection.' && opts.privateKey){
logger && logger.info('[storage-mule] Reauthenticate...');
authenticate(ortcClient, opts);
}
};
ortcClient.onReconnecting = function (ortc) {
logger && logger.warn('[storage-mule] Reconnecting...');
};
ortcClient.onReconnected = function (ortc) {
logger && logger.info('[storage-mule] Reconnected to: ' + ortc.getUrl());
offlineBuffer.process();
};
offlineBuffer.init(ortcClient);
if(opts.privateKey){
authenticate(ortcClient, opts);
} else {
ortcClient.connect(opts.applicationKey, opts.authenticationToken);
}
},
send: function(data){
offlineBuffer.send(data);
},
saveAuthentication: function(){
ortcClient.saveAuthentication.apply(this, arguments);
}
};