dragonroll/backend/services/plugins.js
BinarySandia04 1e4072dae6
Some checks failed
test / run-tests-client (push) Successful in 45s
test / run-tests-backend (push) Failing after 16s
Datagen loads files, remains register to custom models to mongodb
2024-10-19 14:20:21 +02:00

56 lines
1.6 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const BackendApi = require('./api').BackendApi
const express = require('express');
const { getIo } = require('../io/socket');
const { datagenTask } = require('./datagen');
const router = express.Router({
mergeParams: true
});
const basePath = path.resolve(__dirname, '../')
let pluginsInfo = [];
let plugins = {};
let internalSocket = {};
let datagenRegistry = {};
function init(){
console.log("Initializing plugins");
const pluginFolders = fs.readdirSync(path.resolve(basePath + '/plugins'));
pluginFolders.forEach(pluginFolder => {
pluginsInfo.push(JSON.parse(fs.readFileSync(
path.resolve(basePath, 'plugins', pluginFolder, "plugin.json")
)));
});
console.log("Launching using the following plugins:");
pluginsInfo.forEach(pluginInfo => {
console.log(`\t- ${pluginInfo.name}`);
plugins[pluginInfo.package] = {info: pluginInfo, payload: require(`${basePath}/plugins/${pluginInfo.package}/${pluginInfo.backend.entrypoint}`)};
});
// Execute main
Object.keys(plugins).forEach(k => {
datagenRegistry[k] = {modelNames: []};
let pluginApi = new BackendApi(plugins[k].info, router, internalSocket, datagenRegistry[k]);
plugins[k].payload.Main(pluginApi);
});
datagenTask(datagenRegistry);
console.log(internalSocket);
getIo().on('connect', (socket) => {
Object.keys(internalSocket).forEach(k => {
socket.on(k, internalSocket[k]);
});
})
return {
router
}
}
module.exports = {
init
}