From 71514d580e847e2685fa33ea7f87d348c8d55a18 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 30 Aug 2021 11:16:04 +0200 Subject: [PATCH] Multi-Project module reused between Client and Task Server --- Client/client.js | 27 +++-- Environment.js | 3 +- Client/MultiProject.js => MultiProject.js | 43 ++++++- .../Low-Frequency-Learning/LearningSystem.js | 4 +- .../TS/Function-Libraries/TaskFunctions.js | 4 +- TaskServer/MultiProject.js | 109 ------------------ TaskServer/ProcessInstance.js | 4 +- TaskServer/Task.js | 23 +++- 8 files changed, 80 insertions(+), 137 deletions(-) rename Client/MultiProject.js => MultiProject.js (57%) delete mode 100644 TaskServer/MultiProject.js diff --git a/Client/client.js b/Client/client.js index ddf179ff6..02d588d66 100644 --- a/Client/client.js +++ b/Client/client.js @@ -54,17 +54,6 @@ global.CUSTOM_FAIL_RESPONSE = { message: 'Custom Message' } -/* -The CL object is accesible everywhere at the Superalgos Client. -It provides access to all modules built for this Client. -*/ -global.CL = {} -/* -The SA object is accesible everywhere at the Superalgos Client. -It provides access to all modules built Superalgos in general. -*/ -global.SA = {} - /* Servers */ let WEB_SERVER = require('./webServer.js') let DATA_FILE_SERVER = require('./dataFileServer.js') @@ -82,10 +71,24 @@ let WEB_SOCKETS_INTERFACE = require('./webSocketsInterface.js') let HTTP_INTERFACE = require('./httpInterface.js') try { + /* + The CL object is accesible everywhere at the Superalgos Client. + It provides access to all modules built for this Client. + */ + global.CL = {} + /* + The SA object is accesible everywhere at the Superalgos Client. + It provides access to all modules built Superalgos in general. + */ + global.SA = {} + /* + First thing is to load the project schema file. + */ + global.PROJECTS_SCHEMA = require(global.env.PATH_TO_PROJECT_SCHEMA) /* Setting up the modules that will be available for the Servers Running inside this Client */ - let MULTI_PROJECT = require('./MultiProject.js'); + let MULTI_PROJECT = require('../MultiProject.js'); let MULTI_PROJECT_MODULE = MULTI_PROJECT.newMultiProject() MULTI_PROJECT_MODULE.initialize(CL, 'CL') MULTI_PROJECT_MODULE.initialize(SA, 'SA') diff --git a/Environment.js b/Environment.js index 8b1f83d85..aed0520ff 100644 --- a/Environment.js +++ b/Environment.js @@ -8,7 +8,8 @@ exports.newEnvironment = function () { PATH_TO_DATA_STORAGE: './Data-Storage', PATH_TO_PROJECTS: './Projects', PATH_TO_LOG_FILES: './Log-Files', - PATH_TO_PROJECTS_REQUIRED: '../Projects', + PATH_TO_PROJECTS_REQUIRED: './Projects', + PATH_TO_PROJECT_SCHEMA: '../Projects/ProjectsSchema.json', PATH_TO_UI: './UI', PATH_TO_DATA_FILES: './UI/Data-Files/src', PATH_TO_CLIENT: './Client/', diff --git a/Client/MultiProject.js b/MultiProject.js similarity index 57% rename from Client/MultiProject.js rename to MultiProject.js index 954798729..4ed6f29d2 100644 --- a/Client/MultiProject.js +++ b/MultiProject.js @@ -8,12 +8,7 @@ exports.newMultiProject = function () { function initialize(rootObject, rootObjectName) { /* - First thing is to load the project schema file. - */ - let PROJECTS_SCHEMA = require(global.env.PATH_TO_PROJECTS_REQUIRED + '/' + 'ProjectsSchema.json') - - /* - Here we will setup the CL object, with all the + Here we will setup the rootObject object, with all the projects and modules that will have inside. */ rootObject.projects = {} @@ -26,6 +21,9 @@ exports.newMultiProject = function () { projectInstance.utilities = {} projectInstance.globals = {} projectInstance.functionLibraries = {} + projectInstance.taskModules = {} + projectInstance.processModules = {} + projectInstance.botModules = {} if (projectDefinition[rootObjectName] === undefined) { continue } @@ -64,6 +62,39 @@ exports.newMultiProject = function () { projectInstance.functionLibraries[functionLibraryDefinition.propertyName] = requiredFunction.call() } } + + /* Set up Task Modules for this Project */ + if (projectDefinition[rootObjectName].taskModules !== undefined) { + for (let j = 0; j < projectDefinition[rootObjectName].taskModules.length; j++) { + let taskModuleDefinition = projectDefinition[rootObjectName].taskModules[j] + let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + rootObjectName + '/' + 'Task-Modules' + '/' + taskModuleDefinition.fileName + + let requiredObject = require(path) + projectInstance.taskModules[taskModuleDefinition.propertyName] = requiredObject + } + } + + /* Set up Process Modules for this Project */ + if (projectDefinition[rootObjectName].processModules !== undefined) { + for (let j = 0; j < projectDefinition[rootObjectName].processModules.length; j++) { + let processModuleDefinition = projectDefinition[rootObjectName].processModules[j] + let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + rootObjectName + '/' + 'Process-Modules' + '/' + processModuleDefinition.fileName + + let requiredObject = require(path) + projectInstance.processModules[processModuleDefinition.propertyName] = requiredObject + } + } + + /* Set up Bot Modules for this Project */ + if (projectDefinition[rootObjectName].botModules !== undefined) { + for (let j = 0; j < projectDefinition[rootObjectName].botModules.length; j++) { + let botModuleDefinition = projectDefinition[rootObjectName].botModules[j] + let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + rootObjectName + '/' + 'Bot-Modules' + '/' + botModuleDefinition.folderName + '/' + botModuleDefinition.fileName + + let requiredObject = require(path) + projectInstance.botModules[botModuleDefinition.propertyName] = requiredObject + } + } } } } \ No newline at end of file diff --git a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js b/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js index 808c95d27..c1505f124 100644 --- a/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js +++ b/Projects/Foundations/TS/Bot-Modules/Learning-Bot/Low-Frequency-Learning/LearningSystem.js @@ -115,8 +115,8 @@ exports.newFoundationsBotModulesLearningSystem = function (processIndex) { We will scan the project schema until we find the machine learning library defined by the user at the UI. */ - for (let i = 0; i < TS.projects.foundations.globals.taskConstants.PROJECTS_SCHEMA.length; i++) { - let projectSchemaProject = TS.projects.foundations.globals.taskConstants.PROJECTS_SCHEMA[i] + for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { + let projectSchemaProject = PROJECTS_SCHEMA[i] if (projectSchemaProject.name !== machineLearningLibrary.project) { continue } for (let j = 0; j < projectSchemaProject.TS.botModules.length; j++) { diff --git a/Projects/Foundations/TS/Function-Libraries/TaskFunctions.js b/Projects/Foundations/TS/Function-Libraries/TaskFunctions.js index 97ffb77a7..536fe54bb 100644 --- a/Projects/Foundations/TS/Function-Libraries/TaskFunctions.js +++ b/Projects/Foundations/TS/Function-Libraries/TaskFunctions.js @@ -32,8 +32,8 @@ exports.newFoundationsFunctionLibrariesTaskFunctions = function () { We will scan the project schema until we find the module that will run the bot botModule with the name provided. */ - for (let i = 0; i < TS.projects.foundations.globals.taskConstants.PROJECTS_SCHEMA.length; i++) { - let project = TS.projects.foundations.globals.taskConstants.PROJECTS_SCHEMA[i] + for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { + let project = PROJECTS_SCHEMA[i] if (project.name !== TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName) { continue } for (let j = 0; j < project.TS.botModules.length; j++) { botModuleDefinition = project.TS.botModules[j] diff --git a/TaskServer/MultiProject.js b/TaskServer/MultiProject.js deleted file mode 100644 index cb64d2d0b..000000000 --- a/TaskServer/MultiProject.js +++ /dev/null @@ -1,109 +0,0 @@ -exports.newMultiProject = function () { - - let thisObject = { - initialize: initialize - } - - return thisObject; - - function initialize() { - /* - First thing is to load the project schema file. - */ - let PROJECTS_SCHEMA = require(global.env.PATH_TO_PROJECTS_REQUIRED + '/' + 'ProjectsSchema.json') - - /* - Here we will setup the TS object, with all the - projects and modules that will have inside. - */ - global.TS = { - projects: {} - } - for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { - let projectDefinition = PROJECTS_SCHEMA[i] - global.TS.projects[projectDefinition.propertyName] = {} - let projectInstance = global.TS.projects[projectDefinition.propertyName] - - projectInstance.utilities = {} - projectInstance.globals = {} - projectInstance.functionLibraries = {} - projectInstance.taskModules = {} - projectInstance.processModules = {} - projectInstance.botModules = {} - - if (projectDefinition.TS === undefined) { continue } - - /* Set up Utilities of this Project */ - if (projectDefinition.TS.utilities !== undefined) { - for (let j = 0; j < projectDefinition.TS.utilities.length; j++) { - let utilityDefinition = projectDefinition.TS.utilities[j] - let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + 'TS' + '/' + 'Utilities' + '/' + utilityDefinition.fileName - - let requiredObject = require(path) - let requiredFunction = requiredObject[utilityDefinition.functionName] - projectInstance.utilities[utilityDefinition.propertyName] = requiredFunction.call() - } - } - - /* Set up Globals of this Project */ - if (projectDefinition.TS.globals !== undefined) { - for (let j = 0; j < projectDefinition.TS.globals.length; j++) { - let globalDefinition = projectDefinition.TS.globals[j] - let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + 'TS' + '/' + 'Globals' + '/' + globalDefinition.fileName - - let requiredObject = require(path) - let requiredFunction = requiredObject[globalDefinition.functionName] - projectInstance.globals[globalDefinition.propertyName] = requiredFunction.call() - } - } - - /* Set up Function Libraries of this Project */ - if (projectDefinition.TS.functionLibraries !== undefined) { - for (let j = 0; j < projectDefinition.TS.functionLibraries.length; j++) { - let functionLibraryDefinition = projectDefinition.TS.functionLibraries[j] - let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + 'TS' + '/' + 'Function-Libraries' + '/' + functionLibraryDefinition.fileName - - let requiredObject = require(path) - let requiredFunction = requiredObject[functionLibraryDefinition.functionName] - projectInstance.functionLibraries[functionLibraryDefinition.propertyName] = requiredFunction.call() - } - } - - /* Set up Process Modules for this Project */ - if (projectDefinition.TS.taskModules !== undefined) { - for (let j = 0; j < projectDefinition.TS.taskModules.length; j++) { - let taskModuleDefinition = projectDefinition.TS.taskModules[j] - let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + 'TS' + '/' + 'Task-Modules' + '/' + taskModuleDefinition.fileName - - let requiredObject = require(path) - projectInstance.taskModules[taskModuleDefinition.propertyName] = requiredObject - } - } - - /* Set up Process Modules for this Project */ - if (projectDefinition.TS.processModules !== undefined) { - for (let j = 0; j < projectDefinition.TS.processModules.length; j++) { - let processModuleDefinition = projectDefinition.TS.processModules[j] - let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + 'TS' + '/' + 'Process-Modules' + '/' + processModuleDefinition.fileName - - let requiredObject = require(path) - projectInstance.processModules[processModuleDefinition.propertyName] = requiredObject - } - } - - /* Set up Bot Modules for this Project */ - if (projectDefinition.TS.botModules !== undefined) { - for (let j = 0; j < projectDefinition.TS.botModules.length; j++) { - let botModuleDefinition = projectDefinition.TS.botModules[j] - let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + 'TS' + '/' + 'Bot-Modules' + '/' + botModuleDefinition.folderName + '/' + botModuleDefinition.fileName - - let requiredObject = require(path) - projectInstance.botModules[botModuleDefinition.propertyName] = requiredObject - } - } - } - - TS.projects.foundations.globals.taskConstants.PROJECTS_SCHEMA = PROJECTS_SCHEMA - - } -} \ No newline at end of file diff --git a/TaskServer/ProcessInstance.js b/TaskServer/ProcessInstance.js index f0657efa9..baed01931 100644 --- a/TaskServer/ProcessInstance.js +++ b/TaskServer/ProcessInstance.js @@ -52,8 +52,8 @@ the bot type received via websockets events, at the PROJECTS SCHEMA a botModule must be defined with the same type at the property botType. */ - for (let i = 0; i < TS.projects.foundations.globals.taskConstants.PROJECTS_SCHEMA.length; i++) { - let project = TS.projects.foundations.globals.taskConstants.PROJECTS_SCHEMA[i] + for (let i = 0; i < PROJECTS_SCHEMA.length; i++) { + let project = PROJECTS_SCHEMA[i] if (project.name !== TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName) { continue } for (let j = 0; j < project.TS.botModules.length; j++) { botModuleDefinition = project.TS.botModules[j] diff --git a/TaskServer/Task.js b/TaskServer/Task.js index dd0f3acd3..87ff58724 100644 --- a/TaskServer/Task.js +++ b/TaskServer/Task.js @@ -8,10 +8,27 @@ let NODE_JS_PROCESS = require('./NodeJsProcess.js'); let NODE_JS_PROCESS_MODULE = NODE_JS_PROCESS.newNodeJsProcess() NODE_JS_PROCESS_MODULE.initialize() -/* Setting up the modules that will be available for the Task and it's processes */ -let MULTI_PROJECT = require('./MultiProject.js'); +/* +The TS object is accesible everywhere at the Superalgos Client. +It provides access to all modules built for the Task Server. +*/ +global.TS = {} +/* +The SA object is accesible everywhere at the Superalgos Client. +It provides access to all modules built Superalgos in general. +*/ +global.SA = {} +/* +First thing is to load the project schema file. +*/ +global.PROJECTS_SCHEMA = require(global.env.PATH_TO_PROJECT_SCHEMA) +/* +Setting up the modules that will be available for the Servers Running inside this Client +*/ +let MULTI_PROJECT = require('../MultiProject.js'); let MULTI_PROJECT_MODULE = MULTI_PROJECT.newMultiProject() -MULTI_PROJECT_MODULE.initialize() +MULTI_PROJECT_MODULE.initialize(TS, 'TS') +MULTI_PROJECT_MODULE.initialize(SA, 'SA') /* Setting up the global Event Handler */ TS.projects.foundations.globals.taskConstants.EVENT_SERVER_CLIENT_MODULE_OBJECT = TS.projects.foundations.taskModules.eventServerClient.newFoundationsTaskModulesEventServerClient()