mysql-live-client
Version:
The client side script of mysql-live package.
105 lines (104 loc) • 4.51 kB
JavaScript
/// <reference path="../../typings/crypto-js/crypto-js.d.ts" />
var _ = require("lodash");
var CryptoJS = require("crypto-js");
var Dispatcher = (function () {
function Dispatcher(handler) {
this.subscribionWaitingForPassport = [];
this.handler = handler;
}
Dispatcher.prototype.register = function (collectionName) {
this.handler.addCollection(collectionName);
return this.handler.collections[collectionName];
};
Dispatcher.prototype.subscribe = function (publicationName) {
var _this = this;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var onAcknowledgementCb;
if (args && args.length > 0) {
var lastArgument = args[args.length - 1];
if (_.isFunction(lastArgument)) {
onAcknowledgementCb = lastArgument;
args.splice(args.indexOf(args.length - 1), 1);
}
}
else {
args = [];
}
this.handler.socket.emit("subscribe", publicationName, args, function (itemsBack) {
var exists = _.findIndex(_this.subscribionWaitingForPassport, function (subWaiting) { return subWaiting.subscriptionName === publicationName; });
if (itemsBack !== undefined && itemsBack.length > 0 && itemsBack[0] === "No Passport") {
if (!exists || exists === -1) {
_this.subscribionWaitingForPassport.push({ subscriptionName: publicationName, args: args, cb: onAcknowledgementCb });
}
}
else {
if (exists && exists !== -1) {
_this.subscribionWaitingForPassport = _this.subscribionWaitingForPassport.splice(exists, 1);
}
if (onAcknowledgementCb)
onAcknowledgementCb(itemsBack);
}
});
};
Dispatcher.prototype.unsubscribe = function (subscriptionName) {
try {
this.handler.removeSubscriptionsByName(subscriptionName);
_.remove(this.subscribionWaitingForPassport, function (subWaiting) { return subWaiting.subscriptionName === subscriptionName; });
return true;
}
catch (ex) {
return false;
}
};
Dispatcher.prototype.requestRefresh = function (collectionName, cb) {
this.handler.socket.emit("requestRefresh", collectionName, function (itemsBack) { if (cb)
cb(itemsBack); }, cb);
};
Dispatcher.prototype.requestSaveObject = function (collectionName, object, cb) {
this.handler.socket.emit("requestSaveObject", { collectionName: collectionName, object: object }, cb);
};
Dispatcher.prototype.requestRemoveObject = function (collectionName, primaryKey, cb) {
this.handler.socket.emit("requestRemoveObject", { collectionName: collectionName, primaryKey: primaryKey }, cb);
};
Dispatcher.prototype.setPassport = function (passportObj, cb) {
var _this = this;
this.handler.socket.emit('requestSessionId', (function (sessionId) {
var encryptedPassportObj = CryptoJS.AES.encrypt(JSON.stringify(passportObj), sessionId);
_this.handler.socket.emit('set passport', encryptedPassportObj.toString(), function () {
if (cb) {
cb();
}
_this.subscribionWaitingForPassport.forEach(function (sub) {
_this.subscribe.apply(_this, [sub.subscriptionName].concat(sub.args, [sub.cb]));
});
});
}));
};
Dispatcher.prototype.callMethod = function (methodName, args) {
var onAcknowledgementCb;
if (args && args.length > 0) {
var lastArgument = args[args.length - 1];
if (_.isFunction(lastArgument)) {
onAcknowledgementCb = lastArgument;
args.splice(args.indexOf(args.length - 1), 1);
}
}
else {
args = [];
}
if (onAcknowledgementCb) {
this.handler.socket.emit('method call', methodName, args, function (anyargsFromServer) {
onAcknowledgementCb(anyargsFromServer);
});
}
else {
this.handler.socket.emit('method call', methodName, args);
}
};
return Dispatcher;
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = Dispatcher;