import { Microservice } from "./Microservice"; import EventEmitter from "events"; /** * A generic service */ export abstract class InternalService extends EventEmitter { /** * The application instance */ protected readonly app: T; /** * Enable/disable logging for this service */ public logging: boolean = true; /** * Create a new service */ public constructor(app: T) { super(); this.app = app; } // Required Service Implementation ------------------------------------------------------------- /** * The service name */ public abstract readonly NAME: string; /** * Boot the service */ public async boot(): Promise { // no-op } /** * Shut the application down */ public async shutdown(): Promise { // no-op } // Miscellaneous ------------------------------------------------------------------------------ /** * Indicate the application is ready */ public start() { // no-op }; /** * Service-specific logging */ public log(...args: any[]) { if (!this.logging) { return; } console.log(`[${this.NAME}]:`, ...args); } }