@dazejs/framework
Version:
Daze.js - A powerful web framework for Node.js
79 lines • 2.84 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Messenger = void 0;
const cluster_1 = __importDefault(require("cluster"));
const events_1 = require("events");
const container_1 = require("../container");
const helpers_1 = require("../cluster/helpers");
const MESSENGER = 'daze-messenger';
class Messenger extends events_1.EventEmitter {
constructor() {
super();
this.app = container_1.Container.get('app');
this.config = container_1.Container.get('config');
this.setMaxListeners(100);
this.events = this.config.get('messenger', () => {
});
this.run();
this.parseEvents();
}
parseEvents() {
this.events(this);
}
getMessage(channel, data, type = 'all') {
return {
action: MESSENGER,
channel,
data,
type,
};
}
broadcast(channel, data, type) {
var _a;
const message = this.getMessage(channel, data, type);
(_a = process.send) === null || _a === void 0 ? void 0 : _a.call(process, message);
}
broadcastToAgent(channel, data) {
return this.broadcast(channel, data, 'agent');
}
broadcastToWorker(channel, data) {
return this.broadcast(channel, data, 'worker');
}
run() {
if (cluster_1.default.isMaster) {
cluster_1.default.on('message', (_worker, message) => {
var _a;
if (!message || message.action !== MESSENGER)
return;
if (message.type === 'all') {
const workers = (0, helpers_1.getAlivedWorkers)();
for (const worker of workers) {
worker.send(message);
}
}
else if (message.type === 'worker') {
const workers = (_a = this.app.getWorkers()) !== null && _a !== void 0 ? _a : [];
for (const worker of workers) {
worker === null || worker === void 0 ? void 0 : worker.send(message);
}
}
else if (message.type === 'agent') {
const agent = this.app.getAgent();
agent === null || agent === void 0 ? void 0 : agent.send(message);
}
});
}
else {
process.on('message', (message) => {
if (!message || message.action !== MESSENGER)
return;
this.emit(message.channel, message.data);
});
}
}
}
exports.Messenger = Messenger;
//# sourceMappingURL=messenger.js.map