비동기적인 동작.
// 요청 응답 패턴
// 중간자
var CrowMailBus = (function () {
function CrowMailBus(requestor) {
this.requestor = requestor;
this.responder = new CrowMailResponder(this);
}
CrowMailBus.prototype.send = function (message) {
var _this = this;
if (message._from == 'requestor') {
this.responder.processMessage(message);
} else {
this.requestor.processMessage(message);
}
// 웹워커와의 통신형태
// if (message._from == 'requestor') {
// process.nextTick(function () {
// return _this.responder.processMessage(message);
// });
// } else {
// process.nextTick(function () {
// return _this.requestor.processMessage(message);
// });
// }
};
return CrowMailBus;
})();
// 요청
var CrowMailRequestor = (function () {
function CrowMailRequestor() {
}
CrowMailRequestor.prototype.request = function () {
var message = {
_messageDate: new Date(),
_from: "requestor",
_corrolationId: "Aaa",
body: "Invade Moat Cailin"
};
// return message;
var bus = new CrowMailBus(this);
bus.send(message);
};
CrowMailRequestor.prototype.processMessage = function (message) {
console.dir(message);
};
return CrowMailRequestor;
})();
// 응답
var CrowMailResponder = (function () {
function CrowMailResponder(bus) {
this.bus = bus;
}
CrowMailResponder.prototype.processMessage = function (message) {
var response = {
_messageDate: new Date(),
_from: "responder",
_corrolationId: message._corrolationId,
body: "Okey, invaded"
};
this.bus.send(response);
};
return CrowMailResponder;
})();
var requestor = new CrowMailRequestor();
var bus = new CrowMailBus(requestor);
var responder = new CrowMailResponder(bus);
requestor.request("request Send");
requestor.request("request Send");
CrowMailBus.prototype.publish = function (message) {
for (let i = 0; i < this.responders.length; i++) {
// 메시지를 등록한 핸들러 -> 호출
if (this.responders[i].messageName == message._messageName) {
(function (b) {
process.nextTick(function () {
return b.subscriber.processMessage(message);
});
})(this.responders[i]);
}
}
};