relution-sdk
Version:
Relution Software Development Kit for TypeScript and JavaScript
94 lines • 11.2 kB
JavaScript
/*
* @file livedata/SyncEndpoint.ts
* Relution SDK
*
* Created by Thomas Beckmann on 07.12.2015
* Copyright 2016 M-Way Solutions GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @module livedata
*/
/** */
"use strict";
var url = require('url');
/**
* very simple hash coding implementation.
*
* @internal For library use only.
*/
function hashCode() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i - 0] = arguments[_i];
}
var hash = 0;
for (var i = 0; i < args.length; ++i) {
var str = args[i] || '';
for (var j = 0, l = str.length; j < l; ++j) {
var char = str.charCodeAt(j);
hash = ((hash << 5) - hash) + char;
hash |= 0; // Convert to 32bit integer
}
}
return hash;
}
exports.hashCode = hashCode;
/**
* manages connection of SyncStore to one entity.
*/
var SyncEndpoint = (function () {
function SyncEndpoint(options) {
this.isConnected = null;
this.entity = options.entity;
this.modelType = options.modelType;
this.urlRoot = options.urlRoot;
this.socketPath = options.socketPath;
this.userUuid = options.userUuid;
// notice socket.io needs port even for standard protocols
var href = url.parse(options.urlRoot);
this.host = href.protocol + '//' + href.hostname;
if (href.port) {
this.host += ':' + href.port;
}
else if (href.protocol === 'https:') {
this.host += ':443';
}
else if (href.protocol === 'http:') {
this.host += ':80';
}
this.path = href.pathname;
var user = options.userUuid ? options.userUuid + '/' : '';
var name = options.entity;
var hash = hashCode(this.host);
this.channel = user + name + '/' + hash;
}
/**
* close the endpoint explicit.
*/
SyncEndpoint.prototype.close = function () {
if (this.socket) {
// consider calling this.socket.close() instead
this.socket.socket.close();
this.socket = null;
}
if (this.localStore) {
this.localStore.close();
this.localStore = null;
}
};
return SyncEndpoint;
}());
exports.SyncEndpoint = SyncEndpoint;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3luY0VuZHBvaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpdmVkYXRhL1N5bmNFbmRwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0g7O0dBRUc7QUFDSCxNQUFNOztBQUVOLElBQVksR0FBRyxXQUFNLEtBQUssQ0FBQyxDQUFBO0FBTTNCOzs7O0dBSUc7QUFDSDtJQUF5QixjQUFpQjtTQUFqQixXQUFpQixDQUFqQixzQkFBaUIsQ0FBakIsSUFBaUI7UUFBakIsNkJBQWlCOztJQUN4QyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNyQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDM0MsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBWGUsZ0JBQVEsV0FXdkIsQ0FBQTtBQUVEOztHQUVHO0FBQ0g7SUE0QkUsc0JBQVksT0FNWDtRQXZCTSxnQkFBVyxHQUFvQixJQUFJLENBQUM7UUF3QnpDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsMERBQTBEO1FBQzFELElBQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNqRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDL0IsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7UUFDdEIsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUUxQixJQUFNLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUM1RCxJQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzVCLElBQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksNEJBQUssR0FBWjtRQUNFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLCtDQUErQztZQUN6QyxJQUFJLENBQUMsTUFBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNyQixDQUFDO1FBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUNILG1CQUFDO0FBQUQsQ0FBQyxBQXhFRCxJQXdFQztBQXhFWSxvQkFBWSxlQXdFeEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIEBmaWxlIGxpdmVkYXRhL1N5bmNFbmRwb2ludC50c1xyXG4gKiBSZWx1dGlvbiBTREtcclxuICpcclxuICogQ3JlYXRlZCBieSBUaG9tYXMgQmVja21hbm4gb24gMDcuMTIuMjAxNVxyXG4gKiBDb3B5cmlnaHQgMjAxNiBNLVdheSBTb2x1dGlvbnMgR21iSFxyXG4gKlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4gKlxyXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICpcclxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4gKi9cclxuLyoqXHJcbiAqIEBtb2R1bGUgbGl2ZWRhdGFcclxuICovXHJcbi8qKiAqL1xyXG5cclxuaW1wb3J0ICogYXMgdXJsIGZyb20gJ3VybCc7XHJcblxyXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJy4vU3RvcmUnO1xyXG5pbXBvcnQgeyBNb2RlbCwgTW9kZWxDdG9yIH0gZnJvbSAnLi9Nb2RlbCc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuL0NvbGxlY3Rpb24nO1xyXG5pbXBvcnQgKiBhcyBRIGZyb20gJ3EnO1xyXG4vKipcclxuICogdmVyeSBzaW1wbGUgaGFzaCBjb2RpbmcgaW1wbGVtZW50YXRpb24uXHJcbiAqXHJcbiAqIEBpbnRlcm5hbCBGb3IgbGlicmFyeSB1c2Ugb25seS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBoYXNoQ29kZSguLi5hcmdzOiBzdHJpbmdbXSkge1xyXG4gIHZhciBoYXNoID0gMDtcclxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHtcclxuICAgIHZhciBzdHIgPSBhcmdzW2ldIHx8ICcnO1xyXG4gICAgZm9yICh2YXIgaiA9IDAsIGwgPSBzdHIubGVuZ3RoOyBqIDwgbDsgKytqKSB7XHJcbiAgICAgIHZhciBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaik7XHJcbiAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSArIGNoYXI7XHJcbiAgICAgIGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBoYXNoO1xyXG59XHJcblxyXG4vKipcclxuICogbWFuYWdlcyBjb25uZWN0aW9uIG9mIFN5bmNTdG9yZSB0byBvbmUgZW50aXR5LlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFN5bmNFbmRwb2ludCB7XHJcblxyXG4gIHB1YmxpYyBlbnRpdHk6IHN0cmluZztcclxuICBwdWJsaWMgbW9kZWxUeXBlOiBNb2RlbEN0b3I7XHJcbiAgcHVibGljIHVybFJvb3Q6IHN0cmluZztcclxuICBwdWJsaWMgc29ja2V0UGF0aDogc3RyaW5nO1xyXG4gIHB1YmxpYyB1c2VyVXVpZDogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgaG9zdDogc3RyaW5nO1xyXG4gIHB1YmxpYyBwYXRoOiBzdHJpbmc7XHJcbiAgcHVibGljIGNoYW5uZWw6IHN0cmluZztcclxuICBwdWJsaWMgaXNDb25uZWN0ZWQ6IFEuUHJvbWlzZTx2b2lkPiA9IG51bGw7XHJcblxyXG4gIHB1YmxpYyBsb2NhbFN0b3JlOiBTdG9yZTtcclxuICBwdWJsaWMgaW5mbzogUS5Qcm9taXNlPE1vZGVsPjtcclxuICBwdWJsaWMgcHJpb3JpdHk6IG51bWJlcjtcclxuICBwdWJsaWMgc29ja2V0OiBTb2NrZXRJT0NsaWVudC5Tb2NrZXQ7XHJcblxyXG4gIC8vIHByb21pc2Ugb2YgbGFzdCBTeW5jU3RvcmUuZmV0Y2hDaGFuZ2VzXHJcbiAgcHVibGljIHByb21pc2VGZXRjaGluZ0NoYW5nZXM6IFEuUHJvbWlzZTxDb2xsZWN0aW9uPjtcclxuICAvLyB0aW1lc3RhbXAgb2YgbGFzdCBTeW5jU3RvcmUuZmV0Y2hDaGFuZ2VzLCAwIHdoaWxlIHJlcXVlc3QgaXMgb3V0c3RhbmRpbmdcclxuICBwdWJsaWMgdGltZXN0YW1wRmV0Y2hpbmdDaGFuZ2VzOiBudW1iZXI7XHJcblxyXG4gIC8vIHByb21pc2Ugb2YgbGFzdCBTeW5jU3RvcmUuZmV0Y2hTZXJ2ZXJJbmZvXHJcbiAgcHVibGljIHByb21pc2VGZXRjaGluZ1NlcnZlckluZm86IFEuUHJvbWlzZTxNb2RlbD47XHJcbiAgLy8gdGltZXN0YW1wIG9mIGxhc3QgU3luY1N0b3JlLmZldGNoU2VydmVySW5mbywgMCB3aGlsZSByZXF1ZXN0IGlzIG91dHN0YW5kaW5nXHJcbiAgcHVibGljIHRpbWVzdGFtcEZldGNoaW5nU2VydmVySW5mbzogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiB7XHJcbiAgICBlbnRpdHk6IHN0cmluZyxcclxuICAgIG1vZGVsVHlwZTogTW9kZWxDdG9yLFxyXG4gICAgdXJsUm9vdDogc3RyaW5nLFxyXG4gICAgc29ja2V0UGF0aDogc3RyaW5nLFxyXG4gICAgdXNlclV1aWQ6IHN0cmluZ1xyXG4gIH0pIHtcclxuICAgIHRoaXMuZW50aXR5ID0gb3B0aW9ucy5lbnRpdHk7XHJcbiAgICB0aGlzLm1vZGVsVHlwZSA9IG9wdGlvbnMubW9kZWxUeXBlO1xyXG4gICAgdGhpcy51cmxSb290ID0gb3B0aW9ucy51cmxSb290O1xyXG4gICAgdGhpcy5zb2NrZXRQYXRoID0gb3B0aW9ucy5zb2NrZXRQYXRoO1xyXG4gICAgdGhpcy51c2VyVXVpZCA9IG9wdGlvbnMudXNlclV1aWQ7XHJcbiAgICAvLyBub3RpY2Ugc29ja2V0LmlvIG5lZWRzIHBvcnQgZXZlbiBmb3Igc3RhbmRhcmQgcHJvdG9jb2xzXHJcbiAgICBjb25zdCBocmVmID0gdXJsLnBhcnNlKG9wdGlvbnMudXJsUm9vdCk7XHJcbiAgICB0aGlzLmhvc3QgPSBocmVmLnByb3RvY29sICsgJy8vJyArIGhyZWYuaG9zdG5hbWU7XHJcbiAgICBpZiAoaHJlZi5wb3J0KSB7XHJcbiAgICAgIHRoaXMuaG9zdCArPSAnOicgKyBocmVmLnBvcnQ7XHJcbiAgICB9IGVsc2UgaWYgKGhyZWYucHJvdG9jb2wgPT09ICdodHRwczonKSB7XHJcbiAgICAgIHRoaXMuaG9zdCArPSAnOjQ0Myc7XHJcbiAgICB9IGVsc2UgaWYgKGhyZWYucHJvdG9jb2wgPT09ICdodHRwOicpIHtcclxuICAgICAgdGhpcy5ob3N0ICs9ICc6ODAnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYXRoID0gaHJlZi5wYXRobmFtZTtcclxuXHJcbiAgICBjb25zdCB1c2VyID0gb3B0aW9ucy51c2VyVXVpZCA/IG9wdGlvbnMudXNlclV1aWQgKyAnLycgOiAnJztcclxuICAgIGNvbnN0IG5hbWUgPSBvcHRpb25zLmVudGl0eTtcclxuICAgIGNvbnN0IGhhc2ggPSBoYXNoQ29kZSh0aGlzLmhvc3QpO1xyXG4gICAgdGhpcy5jaGFubmVsID0gdXNlciArIG5hbWUgKyAnLycgKyBoYXNoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogY2xvc2UgdGhlIGVuZHBvaW50IGV4cGxpY2l0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjbG9zZSgpIHtcclxuICAgIGlmICh0aGlzLnNvY2tldCkge1xyXG4gICAgICAvLyBjb25zaWRlciBjYWxsaW5nIHRoaXMuc29ja2V0LmNsb3NlKCkgaW5zdGVhZFxyXG4gICAgICAoPGFueT50aGlzLnNvY2tldCkuc29ja2V0LmNsb3NlKCk7XHJcbiAgICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmUpIHtcclxuICAgICAgdGhpcy5sb2NhbFN0b3JlLmNsb3NlKCk7XHJcbiAgICAgIHRoaXMubG9jYWxTdG9yZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==