yjs/build/browser/Connectors/IwcConnector.js
Kevin Jahns bab06e9f3d links
2014-10-17 13:02:12 +00:00

143 lines
17 KiB
JavaScript

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
var createIwcConnector;
createIwcConnector = function(callback, options) {
var IwcConnector, duiClient, init, iwcHandler, received_HB, userIwcHandler;
userIwcHandler = null;
if (options != null) {
userIwcHandler = options.iwcHandler;
}
iwcHandler = {};
duiClient = new DUIClient();
duiClient.connect(function(intent) {
var _ref;
if ((_ref = iwcHandler[intent.action]) != null) {
_ref.map(function(f) {
return setTimeout(function() {
return f(intent);
}, 0);
});
}
if (userIwcHandler != null) {
return userIwcHandler(intent);
}
});
duiClient.initOK();
received_HB = null;
IwcConnector = (function() {
function IwcConnector(engine, HB, execution_listener, yatta) {
var receiveHB, receive_, sendHistoryBuffer, send_;
this.engine = engine;
this.HB = HB;
this.execution_listener = execution_listener;
this.yatta = yatta;
this.duiClient = duiClient;
this.iwcHandler = iwcHandler;
send_ = (function(_this) {
return function(o) {
if (Object.getOwnPropertyNames(_this.initialized).length !== 0) {
return _this.send(o);
}
};
})(this);
this.execution_listener.push(send_);
this.initialized = {};
receiveHB = (function(_this) {
return function(json) {
var him;
HB = json.extras.HB;
him = json.extras.user;
_this.engine.applyOpsCheckDouble(HB);
return _this.initialized[him] = true;
};
})(this);
iwcHandler["Yatta_push_HB_element"] = [receiveHB];
this.sendIwcIntent("Yatta_get_HB_element", this.HB.getOperationCounter());
receive_ = (function(_this) {
return function(intent) {
var o;
o = intent.extras;
if (_this.initialized[o.uid.creator] != null) {
return _this.receive(o);
}
};
})(this);
this.iwcHandler["Yatta_new_operation"] = [receive_];
if (received_HB != null) {
this.engine.applyOpsCheckDouble(received_HB);
}
sendHistoryBuffer = (function(_this) {
return function(intent) {
var json, state_vector;
state_vector = intent.extras;
console.log(state_vector);
json = {
HB: _this.yatta.getHistoryBuffer()._encode(state_vector),
user: _this.yatta.getUserId()
};
return _this.sendIwcIntent("Yatta_push_HB_element", json);
};
})(this);
this.iwcHandler["Yatta_get_HB_element"] = [sendHistoryBuffer];
}
IwcConnector.prototype.setIwcHandler = function(f) {
return userIwcHandler = f;
};
IwcConnector.prototype.sendIwcIntent = function(action_name, content) {
var intent;
intent = null;
if (arguments.length >= 2) {
action_name = arguments[0], content = arguments[1];
intent = {
action: action_name,
component: "",
data: "",
dataType: "",
flags: ["PUBLISH_GLOBAL"],
extras: content
};
} else {
intent = arguments[0];
}
return this.duiClient.sendIntent(intent);
};
IwcConnector.prototype.send = function(o) {
if (o.uid.creator === this.HB.getUserId() && (typeof o.uid.op_number !== "string")) {
return this.sendIwcIntent("Yatta_new_operation", o);
}
};
IwcConnector.prototype.receive = function(o) {
if (o.uid.creator !== this.HB.getUserId()) {
return this.engine.applyOp(o);
}
};
return IwcConnector;
})();
init = function() {
var proposed_user_id;
proposed_user_id = Math.floor(Math.random() * 1000000);
return callback(IwcConnector, proposed_user_id);
};
setTimeout(init, 5000);
return void 0;
};
module.exports = createIwcConnector;
if (typeof window !== "undefined" && window !== null) {
if (window.Y == null) {
window.Y = {};
}
window.Y.createIwcConnector = createIwcConnector;
}
},{}]},{},[1])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3VidW50dS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL2d1bHAtYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwiL2hvbWUvdWJ1bnR1L3dvcmtzcGFjZS9saWIvQ29ubmVjdG9ycy9Jd2NDb25uZWN0b3IuY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDS0EsSUFBQSxrQkFBQTs7QUFBQSxrQkFBQSxHQUFxQixTQUFDLFFBQUQsRUFBVyxPQUFYLEdBQUE7QUFDbkIsTUFBQSxzRUFBQTtBQUFBLEVBQUEsY0FBQSxHQUFpQixJQUFqQixDQUFBO0FBQ0EsRUFBQSxJQUFHLGVBQUg7QUFDRSxJQUFhLGlCQUFrQixRQUE5QixVQUFELENBREY7R0FEQTtBQUFBLEVBSUEsVUFBQSxHQUFhLEVBSmIsQ0FBQTtBQUFBLEVBS0EsU0FBQSxHQUFnQixJQUFBLFNBQUEsQ0FBQSxDQUxoQixDQUFBO0FBQUEsRUFPQSxTQUFTLENBQUMsT0FBVixDQUFrQixTQUFDLE1BQUQsR0FBQTtBQUNoQixRQUFBLElBQUE7O1VBQXlCLENBQUUsR0FBM0IsQ0FBK0IsU0FBQyxDQUFELEdBQUE7ZUFDN0IsVUFBQSxDQUFXLFNBQUEsR0FBQTtpQkFDVCxDQUFBLENBQUUsTUFBRixFQURTO1FBQUEsQ0FBWCxFQUVFLENBRkYsRUFENkI7TUFBQSxDQUEvQjtLQUFBO0FBSUEsSUFBQSxJQUFHLHNCQUFIO2FBQ0UsY0FBQSxDQUFlLE1BQWYsRUFERjtLQUxnQjtFQUFBLENBQWxCLENBUEEsQ0FBQTtBQUFBLEVBZUEsU0FBUyxDQUFDLE1BQVYsQ0FBQSxDQWZBLENBQUE7QUFBQSxFQWlCQSxXQUFBLEdBQWMsSUFqQmQsQ0FBQTtBQUFBLEVBMkJNO0FBUVMsSUFBQSxzQkFBRSxNQUFGLEVBQVcsRUFBWCxFQUFnQixrQkFBaEIsRUFBcUMsS0FBckMsR0FBQTtBQUNYLFVBQUEsNkNBQUE7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QXNDLENBQXRDLEVBREY7T0FESTtJQUFBLENBMUVOLENBQUE7O0FBQUEsMkJBbUZBLE9BQUEsR0FBUyxTQUFDLENBQUQsR0FBQTtBQUNQLE1BQUEsSUFBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU4sS0FBbUIsSUFBQyxDQUFBLEVBQUUsQ0FBQyxTQUFKLENBQUEsQ0FBdEI7ZUFDRSxJQUFDLENBQUEsTUFBTSxDQUFDLE9BQVIsQ0FBZ0IsQ0FBaEIsRUFERjtPQURPO0lBQUEsQ0FuRlQsQ0FBQTs7d0JBQUE7O01BbkNGLENBQUE7QUFBQSxFQTJIQSxJQUFBLEdBQU8sU0FBQSxHQUFBO0FBRUwsUUFBQSxnQkFBQTtBQUFBLElBQUEsZ0JBQUEsR0FBbUIsSUFBSSxDQUFDLEtBQUwsQ0FBVyxJQUFJLENBQUMsTUFBTCxDQUFBLENBQUEsR0FBYyxPQUF6QixDQUFuQixDQUFBO1dBQ0EsUUFBQSxDQUFTLFlBQVQsRUFBdUIsZ0JBQXZCLEVBSEs7RUFBQSxDQTNIUCxDQUFBO0FBQUEsRUFnSUEsVUFBQSxDQUFXLElBQVgsRUFBaUIsSUFBakIsQ0FoSUEsQ0FBQTtTQWtJQSxPQW5JbUI7QUFBQSxDQUFyQixDQUFBOztBQUFBLE1Bc0lNLENBQUMsT0FBUCxHQUFpQixrQkF0SWpCLENBQUE7O0FBdUlBLElBQUcsZ0RBQUg7QUFDRSxFQUFBLElBQU8sZ0JBQVA7QUFDRSxJQUFBLE1BQU0sQ0FBQyxDQUFQLEdBQVcsRUFBWCxDQURGO0dBQUE7QUFBQSxFQUVBLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0JBQVQsR0FBOEIsa0JBRjlCLENBREY7Q0F2SUEiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKX12YXIgZj1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwoZi5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxmLGYuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiXG4jXG4jIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgY29ubmVjdG9yIGlzIGluaXRpYWxpemVkLlxuIyBAcGFyYW0ge1N0cmluZ30gaW5pdGlhbF91c2VyX2lkIE9wdGlvbmFsLiBZb3UgY2FuIHNldCB5b3Ugb3duIHVzZXJfaWQgKHNpbmNlIHRoZSBpZHMgb2YgZHVpY2xpZW50IGFyZSBub3QgYWx3YXlzIHVuaXF1ZSlcbiNcbmNyZWF0ZUl3Y0Nvbm5lY3RvciA9IChjYWxsYmFjaywgb3B0aW9ucyktPlxuICB1c2VySXdjSGFuZGxlciA9IG51bGxcbiAgaWYgb3B0aW9ucz9cbiAgICB7aXdjSGFuZGxlcjogdXNlckl3Y0hhbmRsZXJ9ID0gb3B0aW9uc1xuXG4gIGl3Y0hhbmRsZXIgPSB7fVxuICBkdWlDbGllbnQgPSBuZXcgRFVJQ2xpZW50KClcbiAgI0BkdWlDbGllbnQgPSBuZXcgaXdjLkNsaWVudCgpXG4gIGR1aUNsaWVudC5jb25uZWN0IChpbnRlbnQpLT5cbiAgICBpd2NIYW5kbGVyW2ludGVudC5hY3Rpb25dPy5tYXAgKGYpLT5cbiAgICAgIHNldFRpbWVvdXQgKCktPlxuICAgICAgICBmIGludGVudFxuICAgICAgLCAwXG4gICAgaWYgdXNlckl3Y0hhbmRsZXI/XG4gICAgICB1c2VySXdjSGFuZGxlciBpbnRlbnRcblxuICBkdWlDbGllbnQuaW5pdE9LKClcblxuICByZWNlaXZlZF9IQiA9IG51bGxcblxuICAjXG4gICMgVGhlIEl3YyBDb25uZWN0b3IgYWRkcyBzdXBwb3J0IGZvciB0aGUgSW50ZXItV2lkZ2V0LUNvbW11bmljYXRpb24gcHJvdG9jb2wgdGhhdCBpcyB1c2VkIGluIHRoZSBSb2xlLVNESy5cbiAgI1xuICAjIFlvdSBtdXN0IG5vdCB1c2UgeW91ciBvd24gSVdDIGNsaWVudCB3aGVuIHVzaW5nIHRoaXMgY29ubmVjdG9yISFcbiAgI1xuICAjIEBzZWUgaHR0cDovL2RiaXMucnd0aC1hYWNoZW4uZGUvY21zL3Byb2plY3RzL3RoZS14bXBwLWV4cGVyaWVuY2UjaW50ZXJ3aWRnZXQtY29tbXVuaWNhdGlvblxuICAjIEBzZWUgaHR0cDovL2RiaXMucnd0aC1hYWNoZW4uZGUvY21zL3Byb2plY3RzL1JPTEVcbiAgI1xuICBjbGFzcyBJd2NDb25uZWN0b3JcblxuICAgICNcbiAgICAjIEBwYXJhbSB7RW5naW5lfSBlbmdpbmUgVGhlIHRyYW5zZm9ybWF0aW9uIGVuZ2luZVxuICAgICMgQHBhcmFtIHtIaXN0b3J5QnVmZmVyfSBIQlxuICAgICMgQHBhcmFtIHtBcnJheTxGdW5jdGlvbj59IGV4ZWN1dGlvbl9saXN0ZW5lciBZb3UgbXVzdCBlbnN1cmUgdGhhdCB3aGVuZXZlciBhbiBvcGVyYXRpb24gaXMgZXhlY3V0ZWQsIGV2ZXJ5IGZ1bmN0aW9uIGluIHRoaXMgQXJyYXkgaXMgY2FsbGVkLlxuICAgICMgQHBhcmFtIHtZYXR0YUZyYW1ld29ya30geWF0dGEgVGhlIFlhdHRhIGZyYW1ld29yay5cbiAgICAjXG4gICAgY29uc3RydWN0b3I6IChAZW5naW5lLCBASEIsIEBleGVjdXRpb25fbGlzdGVuZXIsIEB5YXR0YSktPlxuICAgICAgQGR1aUNsaWVudCA9IGR1aUNsaWVudFxuICAgICAgQGl3Y0hhbmRsZXIgPSBpd2NIYW5kbGVyXG5cbiAgICAgIHNlbmRfID0gKG8pPT5cbiAgICAgICAgaWYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQGluaXRpYWxpemVkKS5sZW5ndGggaXNudCAwXG4gICAgICAgICAgQHNlbmQgb1xuICAgICAgQGV4ZWN1dGlvbl9saXN0ZW5lci5wdXNoIHNlbmRfXG5cbiAgICAgIEBpbml0aWFsaXplZCA9IHt9XG4gICAgICByZWNlaXZlSEIgPSAoanNvbik9PlxuICAgICAgICBIQiA9IGpzb24uZXh0cmFzLkhCXG4gICAgICAgIGhpbSA9IGpzb24uZXh0cmFzLnVzZXJcbiAgICAgICAgdGhpcy5lbmdpbmUuYXBwbHlPcHNDaGVja0RvdWJsZSBIQlxuICAgICAgICBAaW5pdGlhbGl6ZWRbaGltXSA9IHRydWVcbiAgICAgIGl3Y0hhbmRsZXJbXCJZYXR0YV9wdXNoX0hCX2VsZW1lbnRcIl0gPSBbcmVjZWl2ZUhCXVxuXG4gICAgICBAc2VuZEl3Y0ludGVudCBcIllhdHRhX2dldF9IQl9lbGVtZW50XCIsIEBIQi5nZXRPcGVyYXRpb25Db3VudGVyKClcblxuICAgICAgcmVjZWl2ZV8gPSAoaW50ZW50KT0+XG4gICAgICAgIG8gPSBpbnRlbnQuZXh0cmFzXG4gICAgICAgIGlmIEBpbml0aWFsaXplZFtvLnVpZC5jcmVhdG9yXT8gIyBpbml0aWFsaXplIGZpcnN0XG4gICAgICAgICAgQHJlY2VpdmUgb1xuXG4gICAgICBAaXdjSGFuZGxlcltcIllhdHRhX25ld19vcGVyYXRpb25cIl0gPSBbcmVjZWl2ZV9dXG5cbiAgICAgIGlmIHJlY2VpdmVkX0hCP1xuICAgICAgICBAZW5naW5lLmFwcGx5T3BzQ2hlY2tEb3VibGUgcmVjZWl2ZWRfSEJcblxuICAgICAgc2VuZEhpc3RvcnlCdWZmZXIgPSAoaW50ZW50KT0+XG4gICAgICAgIHN0YXRlX3ZlY3RvciA9IGludGVudC5leHRyYXNcbiAgICAgICAgY29uc29sZS5sb2cgc3RhdGVfdmVjdG9yXG4gICAgICAgIGpzb24gPVxuICAgICAgICAgIEhCIDogQHlhdHRhLmdldEhpc3RvcnlCdWZmZXIoKS5fZW5jb2RlKHN0YXRlX3ZlY3RvcilcbiAgICAgICAgICB1c2VyIDogQHlhdHRhLmdldFVzZXJJZCgpXG4gICAgICAgIEBzZW5kSXdjSW50ZW50IFwiWWF0dGFfcHVzaF9IQl9lbGVtZW50XCIsIGpzb25cbiAgICAgIEBpd2NIYW5kbGVyW1wiWWF0dGFfZ2V0X0hCX2VsZW1lbnRcIl0gPSBbc2VuZEhpc3RvcnlCdWZmZXJdXG5cbiAgICAjXG4gICAgIyBTZXQgeW91ciBvd24gSVdDIGhhbmRsZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIFlhdHRhIGNvbnN1bWVkIHRoZVxuICAgICMgZGF0YSBmcm9tIHRoZSByZWNlaXZlZCBpbnRlbnQuXG4gICAgI1xuICAgIHNldEl3Y0hhbmRsZXI6IChmKS0+XG4gICAgICB1c2VySXdjSGFuZGxlciA9IGZcblxuICAgICNcbiAgICAjIEhlbHBlciBmb3Igc2VuZGluZyBpd2MgaW50ZW50cy5cbiAgICAjIEBvdmVybG9hZCBzZW5kSXdjSW50ZW50IGludGVudFxuICAgICMgICBAcGFyYW0ge09iamVjdH0gaW50ZW50IFRoZSBpbnRlbnQgb2JqZWN0LlxuICAgICMgQG92ZXJsb2FkIHNlbmRJd2NJbnRlbnQgYWN0aW9uX25hbWUsIGNvbnRlbnRcbiAgICAjICAgQHBhcmFtIHtTdHJpbmd9IGFjdGlvbl9uYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdGhhdCBpcyBnb2luZyB0byBiZSBzZW5kLlxuICAgICMgICBAcGFyYW0ge1N0cmluZ30gY29udGVudCBUaGUgY29udGVudCB0aGF0IGlzIGF0dGVjaGVkIHRvIHRoZSBpbnRlbnQuXG4gICAgI1xuICAgIHNlbmRJd2NJbnRlbnQ6IChhY3Rpb25fbmFtZSwgY29udGVudCktPlxuICAgICAgaW50ZW50ID0gbnVsbFxuICAgICAgaWYgYXJndW1lbnRzLmxlbmd0aCA+PSAyXG4gICAgICAgIFthY3Rpb25fbmFtZSwgY29udGVudF0gPSBhcmd1bWVudHNcbiAgICAgICAgaW50ZW50ID1cbiAgICAgICAgICBhY3Rpb246IGFjdGlvbl9uYW1lXG4gICAgICAgICAgY29tcG9uZW50OiBcIlwiXG4gICAgICAgICAgZGF0YTogXCJcIlxuICAgICAgICAgIGRhdGFUeXBlOiBcIlwiXG4gICAgICAgICAgZmxhZ3M6IFtcIlBVQkxJU0hfR0xPQkFMXCJdXG4gICAgICAgICAgZXh0cmFzOiBjb250ZW50XG4gICAgICBlbHNlXG4gICAgICAgIGludGVudCA9IGFyZ3VtZW50c1swXVxuXG4gICAgICBAZHVpQ2xpZW50LnNlbmRJbnRlbnQoaW50ZW50KVxuXG4gICAgI1xuICAgICMgQHByaXZhdGVcbiAgICAjIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIGFuIG9wZXJhdGlvbiB3YXMgZXhlY3V0ZWQuXG4gICAgIyBAcGFyYW0ge09wZXJhdGlvbn0gbyBUaGUgb3BlcmF0aW9uIHRoYXQgd2FzIGV4ZWN1dGVkLlxuICAgICNcbiAgICBzZW5kOiAobyktPlxuICAgICAgaWYgby51aWQuY3JlYXRvciBpcyBASEIuZ2V0VXNlcklkKCkgYW5kICh0eXBlb2Ygby51aWQub3BfbnVtYmVyIGlzbnQgXCJzdHJpbmdcIilcbiAgICAgICAgQHNlbmRJd2NJbnRlbnQgXCJZYXR0YV9uZXdfb3BlcmF0aW9uXCIsIG9cblxuICAgICNcbiAgICAjIEBwcml2YXRlXG4gICAgIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBvcGVyYXRpb24gd2FzIHJlY2VpdmVkIGZyb20gYW5vdGhlciBwZWVyLlxuICAgICMgQHBhcmFtIHtPcGVyYXRpb259IG8gVGhlIG9wZXJhdGlvbiB0aGF0IHdhcyByZWNlaXZlZC5cbiAgICAjXG4gICAgcmVjZWl2ZTogKG8pLT5cbiAgICAgIGlmIG8udWlkLmNyZWF0b3IgaXNudCBASEIuZ2V0VXNlcklkKClcbiAgICAgICAgQGVuZ2luZS5hcHBseU9wIG9cblxuXG4gIGluaXQgPSAoKS0+XG4gICAgIyBwcm9wb3NlZF91c2VyX2lkID0gZHVpQ2xpZW50LmdldEl3Y0NsaWVudCgpLl9jb21wb25lbnROYW1lICNUT0RPOiBUaGlzIGlzIHN0dXBpZCEgd2h5IGNhbid0IGkgdXNlIHRoaXM/XG4gICAgcHJvcG9zZWRfdXNlcl9pZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMDAwMDAwKVxuICAgIGNhbGxiYWNrIEl3Y0Nvbm5lY3RvciwgcHJvcG9zZWRfdXNlcl9pZFxuXG4gIHNldFRpbWVvdXQgaW5pdCwgNTAwMFxuXG4gIHVuZGVmaW5lZFxuXG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlSXdjQ29ubmVjdG9yXG5pZiB3aW5kb3c/XG4gIGlmIG5vdCB3aW5kb3cuWT9cbiAgICB3aW5kb3cuWSA9IHt9XG4gIHdpbmRvdy5ZLmNyZWF0ZUl3Y0Nvbm5lY3RvciA9IGNyZWF0ZUl3Y0Nvbm5lY3RvclxuXG4iXX0=