|
@@ -0,0 +1,99 @@
|
|
|
+/*
|
|
|
+ * Copyright (C) 2024 Puter Technologies Inc.
|
|
|
+ *
|
|
|
+ * This file is part of Puter.
|
|
|
+ *
|
|
|
+ * Puter is free software: you can redistribute it and/or modify
|
|
|
+ * it under the terms of the GNU Affero General Public License as published
|
|
|
+ * by the Free Software Foundation, either version 3 of the License, or
|
|
|
+ * (at your option) any later version.
|
|
|
+ *
|
|
|
+ * This program is distributed in the hope that it will be useful,
|
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
+ * GNU Affero General Public License for more details.
|
|
|
+ *
|
|
|
+ * You should have received a copy of the GNU Affero General Public License
|
|
|
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
+ */
|
|
|
+
|
|
|
+// TODO: import via `USE` static member
|
|
|
+const BaseService = require("../../services/BaseService");
|
|
|
+const { Endpoint } = require("../../util/expressutil");
|
|
|
+
|
|
|
+/**
|
|
|
+ * This is a template service that you can copy and paste to create new services.
|
|
|
+ * You can also add to this service temporarily to test something.
|
|
|
+ */
|
|
|
+class TemplateService extends BaseService {
|
|
|
+ static USE = {
|
|
|
+ // - Defined by lib/__lib__.js,
|
|
|
+ // - Exposed to `useapi` by TemplateModule.js
|
|
|
+ workinprogress: 'workinprogress'
|
|
|
+ }
|
|
|
+
|
|
|
+ _construct () {
|
|
|
+ // Use this override to initialize instance variables.
|
|
|
+ }
|
|
|
+
|
|
|
+ async _init () {
|
|
|
+ // This is where you initialize the service and prepare
|
|
|
+ // for the consolidation phase.
|
|
|
+ this.log.info("I am the template service.");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * TemplateService listens to this event to provide an example endpoint
|
|
|
+ */
|
|
|
+ ['__on_install.routes'] (_, { app }) {
|
|
|
+ this.log.info("TemplateService get the event for installing endpoint.");
|
|
|
+ Endpoint({
|
|
|
+ route: '/example-endpoint',
|
|
|
+ methods: ['GET'],
|
|
|
+ handler: async (req, res) => {
|
|
|
+ res.send(this.workinprogress.hello_world());
|
|
|
+ }
|
|
|
+ }).attach(app);
|
|
|
+ // ^ Don't forget to attach the endpoint to the app!
|
|
|
+ // it's very easy to forget this step.
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * TemplateService listens to this event to provide an example event
|
|
|
+ */
|
|
|
+ ['__on_boot.consolidation'] () {
|
|
|
+ // At this stage, all services have been initialized and it is
|
|
|
+ // safe to start emitting events.
|
|
|
+ this.log.info("TemplateService sees consolidation boot phase.");
|
|
|
+
|
|
|
+ const svc_event = this.services.get('event');
|
|
|
+
|
|
|
+ svc_event.on('template-service.hello', (_eventid, event_data) => {
|
|
|
+ this.log.info('template-service said hello to itself; this is expected', {
|
|
|
+ event_data,
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ svc_event.emit('template-service.hello', {
|
|
|
+ message: 'Hello all you other services! I am the template service.'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * TemplateService listens to this event to show you that it's here
|
|
|
+ */
|
|
|
+ ['__on_boot.activation'] () {
|
|
|
+ this.log.info("TemplateService sees activation boot phase.");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * TemplateService listens to this event to show you that it's here
|
|
|
+ */
|
|
|
+ ['__on_start.webserver'] () {
|
|
|
+ this.log.info("TemplateService sees it's time to start web servers.");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+module.exports = {
|
|
|
+ TemplateService
|
|
|
+};
|
|
|
+
|