egg
Version:
A web application framework for Node.js
66 lines (65 loc) • 1.89 kB
JavaScript
import { EggApplicationCore } from "./egg.js";
import { AgentWorkerLoader } from "./loader/AgentWorkerLoader.js";
import "./loader/index.js";
//#region src/lib/agent.ts
/**
* Singleton instance in Agent Worker, extend {@link EggApplicationCore}
* @augments EggApplicationCore
*/
var Agent = class extends EggApplicationCore {
#agentAliveHandler;
/**
* @class
* @param {Object} options - see {@link EggApplicationCore}
*/
constructor(options) {
super({
...options,
type: "agent"
});
this.lifecycle.addBootHook({ configDidLoad: () => this.startKeepAlive() });
}
/**
* Start the keepalive timer that prevents the agent process from exiting
* when it has no pending I/O. Called from configDidLoad so that the timer
* is not created during snapshot build (configDidLoad is skipped in snapshot mode).
*/
startKeepAlive() {
if (this.#agentAliveHandler) return;
this.#agentAliveHandler = setInterval(() => {
this.coreLogger.info("[]");
}, 864e5);
}
customEggLoader() {
return AgentWorkerLoader;
}
_wrapMessenger() {
for (const methodName of [
"broadcast",
"sendTo",
"sendToApp",
"sendToAgent",
"sendRandom"
]) wrapMethod(methodName, this.messenger, this.coreLogger);
function wrapMethod(methodName, messenger, logger) {
const originMethod = messenger[methodName];
messenger[methodName] = function(...args) {
const stack = (/* @__PURE__ */ new Error()).stack.split("\n").slice(1).join("\n");
logger.warn("agent can't call %s before server started\n%s", methodName, stack);
originMethod.apply(this, args);
};
messenger.prependOnceListener("egg-ready", () => {
messenger[methodName] = originMethod;
});
}
}
async close() {
if (this.#agentAliveHandler) {
clearInterval(this.#agentAliveHandler);
this.#agentAliveHandler = void 0;
}
await super.close();
}
};
//#endregion
export { Agent };