Monologue Integration With postal
by ifandelse
HTML
<script src="http://underscorejs.org/underscore-min.js"></script>
<script src="https://raw.github.com/ifandelse/postal.js/master/lib/browser/postal.js"></script>
<script src="https://raw.github.com/ifandelse/monologue.js/master/lib/browser/monologue.js"></script>
JavaScript
(function(postal, Monologue, _){
Monologue.prototype.goPostal = function(channel, topic) {
var pubs;
var _channel = channel || postal.configuration.DEFAULT_CHANNEL;
var _topic = topic || "#";
var bridge = this.__postal__ = {};
if(Object.prototype.toString.call(channel) === "[object String]" || arguments.length === 0) {
pubs = [{ channel: _channel, topic: _topic }];
} else if (typeof channel === "object") {
pubs = _.reduce(channel, function(memo, channel, topic) {
memo.push({ channel: channel, topic: topic });
}, []);
}
_.each(pubs, function(item) {
bridge[item.topic] = this.on(item.topic, function(d, e) {
var envelope = _.extend({}, e, { channel: item.channel } );
postal.publish(envelope);
});
}, this);
};
}(postal, Monologue, _));
postal.addWireTap(function(d, e){
$('body').append("<div><pre>" + JSON.stringify(e, null, 4) + "</pre></div>");
});
var Worker = function(name) {
this.name = name;
};
Worker.prototype.doWork = function() {
this.emit("work.done", { who: this.name });
};
Monologue.makeEmitter(Worker);
var instanceA = new Worker();
instanceA.goPostal("OnTheBusNowFolks");
instanceA.doWork();
var instanceB = new Worker();
instanceB.goPostal();
instanceB.doWork();
var instanceC = new Worker();
instanceC.goPostal("HiFromChannelC");
instanceC.doWork();