UNPKG

hjs-message

Version:
174 lines (160 loc) 5.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageBroadcaster = exports.Registration = undefined; var _createClass2 = require("babel-runtime/helpers/createClass"); var _createClass3 = _interopRequireDefault(_createClass2); var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _message = require("./message"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Registration = exports.Registration = function Registration() { (0, _classCallCheck3.default)(this, Registration); this.targets = []; this.targetWhats = []; this.targetWhats = null; this.senderWhat = 0; this.targets = null; this.next = null; this.prev = null; }; /** @babel */ var INSTANCE = null; var MessageBroadcaster = exports.MessageBroadcaster = function () { function MessageBroadcaster() { (0, _classCallCheck3.default)(this, MessageBroadcaster); this.mReg = null; } (0, _createClass3.default)(MessageBroadcaster, [{ key: "dumpRegistrations", value: function dumpRegistrations() { var start = this.mReg; console.log("MessageBroadcaster " + this + " {"); if (start !== null) { var r = start; var s = ""; var n = 0; do { s += " senderWhat=" + r.senderWhat; n = r.targets.length; for (var i = 0; i < n; i++) { s += " [" + r.targetWhats[i] + "] " + r.targets[i] + "/n"; } r = r.next; } while (r !== start); s += "}"; console.log(s); } } }, { key: "publish", value: function publish(msg) { if (this.mReg === null) { return; } var senderWhat = msg.what; var start = this.mReg; var r = start; do { if (r.senderWhat >= senderWhat) { break; } r = r.next; } while (r !== start); if (r.senderWhat === senderWhat) { var targets = r.targets; var whats = r.targetWhats; var n = targets.length; var t = null; var m = null; for (var i = 0; i < n; i++) { t = targets[i]; m = _message.Message.obtain(); m.copyFrom(msg); m.what = whats[i]; t.sendMessage(m); } } } }, { key: "subscribe", value: function subscribe(senderWhat, handler, targetWhat) { var r = null; if (!this.mReg) { r = new Registration(); r.senderWhat = senderWhat; r.targets = [handler]; r.targetWhats = [targetWhat]; this.mReg = r; r.next = r; r.prev = r; } else { var start = this.mReg; var n = 0; r = start; do { if (r.senderWhat >= senderWhat) { break; } r = r.next; } while (r !== start); if (r.senderWhat !== senderWhat) { var reg = new Registration(); reg.senderWhat = senderWhat; reg.targets = new Array(1); reg.targetWhats = new Array(1); reg.next = r; reg.prev = r.prev; r.prev.next = reg; r.prev = reg; if (r === this.mReg && r.senderWhat > reg.senderWhat) { this.mReg = reg; } r = reg; } else { n = r.targets.length - 1; } r.targets[n] = handler; r.targetWhats[n] = targetWhat; } } }, { key: "unsubscribe", value: function unsubscribe(senderWhat, handler, targetWhat) { var start = this.mReg; var r = start; if (this.mReg === null) { return; } do { if (r.senderWhat >= senderWhat) { break; } r = r.next; } while (r !== start); if (r.senderWhat === senderWhat) { var targets = r.targets; var whats = r.targetWhats; var oldLen = targets.length; for (var i = 0; i < oldLen; i++) { if (targets[i] === handler && whats[i] === targetWhat) { r.targets.splice(i, 1); console.log(r.targets); r.targetWhats.splice(oldLen - 1, 1); console.log(r.targetWhats); break; } } } } }], [{ key: "getInstance", value: function getInstance() { if (!INSTANCE) { INSTANCE = new MessageBroadcaster(); } return INSTANCE; } }]); return MessageBroadcaster; }();