- Added a config system to the addons - Added options in the config for dynamic variables - Updated example and code to use new config and options
This commit is contained in:
7
server/addons/example/config.json
Normal file
7
server/addons/example/config.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"name": "Addon 1",
|
||||||
|
"enabled": false,
|
||||||
|
"options": {
|
||||||
|
"eventName": "connection"
|
||||||
|
}
|
||||||
|
}
|
||||||
17
server/addons/example/index.js
Normal file
17
server/addons/example/index.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
// addons/addon1/index.js
|
||||||
|
|
||||||
|
// Function called by the main application to initialize the addon
|
||||||
|
export function initialize(nodeIo, config) {
|
||||||
|
console.log(`Initializing ${config.name}`);
|
||||||
|
|
||||||
|
// Call other functions within the addon module
|
||||||
|
registerSocketEvents(nodeIo, config);
|
||||||
|
// Call additional initialization functions if needed
|
||||||
|
}
|
||||||
|
|
||||||
|
// Function to register Socket.IO event handlers
|
||||||
|
function registerSocketEvents(nodeIo, config) {
|
||||||
|
nodeIo.on(config.options.eventName, (data) => {
|
||||||
|
console.log(`Received event "${config.options.eventName}" from client:`, data);
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
// Function called by the main application to initialize the addon
|
|
||||||
export function initialize(io) {
|
|
||||||
console.log('Initializing addon1');
|
|
||||||
|
|
||||||
// Call other functions within the addon module
|
|
||||||
registerSocketEvents(io);
|
|
||||||
// Call additional initialization functions if needed
|
|
||||||
}
|
|
||||||
|
|
||||||
// Function to register Socket.IO event handlers
|
|
||||||
function registerSocketEvents(io) {
|
|
||||||
io.on('connection', (socket) => {
|
|
||||||
console.log('A client connected from addon1');
|
|
||||||
|
|
||||||
// Add more event handlers if needed
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -6,7 +6,7 @@ import path from 'path';
|
|||||||
export const loadAddons = async (nodeIo) => {
|
export const loadAddons = async (nodeIo) => {
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
const __dirname = path.dirname(__filename);
|
const __dirname = path.dirname(__filename);
|
||||||
|
|
||||||
const addonsDir = path.join(__dirname, '../addons');
|
const addonsDir = path.join(__dirname, '../addons');
|
||||||
|
|
||||||
// Read the directory containing addon modules
|
// Read the directory containing addon modules
|
||||||
@@ -14,13 +14,18 @@ export const loadAddons = async (nodeIo) => {
|
|||||||
|
|
||||||
addonDirectories.forEach(addonDir => {
|
addonDirectories.forEach(addonDir => {
|
||||||
if (addonDir.isDirectory()) {
|
if (addonDir.isDirectory()) {
|
||||||
const addonPath = path.join(addonsDir, addonDir.name, 'index.js');
|
const addonConfigPath = path.join(addonsDir, addonDir.name, 'config.json');
|
||||||
|
if (fs.existsSync(addonConfigPath)) {
|
||||||
import(`file://${addonPath}`).then(addon => {
|
const addonConfig = JSON.parse(fs.readFileSync(addonConfigPath, 'utf-8'));
|
||||||
console.log("Loading addon: ", addon);
|
if (addonConfig.enabled) {
|
||||||
addon.initialize(nodeIo);
|
const addonIndexPath = path.join(addonsDir, addonDir.name, 'index.js');
|
||||||
console.log(`Addon ${addonDir.name} loaded.`);
|
import(`file://${addonIndexPath}`).then(addonModule => {
|
||||||
})
|
console.log("Loading addon: ", addonModule);
|
||||||
|
addonModule.initialize(nodeIo, addonConfig);
|
||||||
|
console.log(`Addon ${addonConfig.name} loaded.`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user