From 4cbd1cccecc9571a349d9eef71ffe39ba1c1c676 Mon Sep 17 00:00:00 2001 From: Roy Gollub Date: Wed, 14 Aug 2024 16:07:49 +0200 Subject: [PATCH 01/12] # Release 2.0.0 ## New features - Supports FlowConfig feature to set source to forward via HTTP request - Provide version of module via 'OnNewStatusModuleVersion' - Function 'getParameters' to provide PersistentData parameters - Check if features of module can be used on device and provide this via 'OnNewStatusModuleIsActive' event / 'getStatusModuleActive' function - Function to 'resetModule' to default setup ## Improvements - Added parameters to 'addRequest'-function - Added ENUMs for RequestMode - New UI design available (e.g. selectable via CSK_Module_PersistentData v4.1.0 or higher), see 'OnNewStatusCSKStyle' - check if instance exists if selected - 'loadParameters' returns its success - 'sendParameters' can control if sent data should be saved directly by CSK_Module_PersistentData - Added UI icon and browser tab information --- CHANGELOG.md | 18 + .../CSK_Module_MultiHTTPClient/UI_sample.png | Bin 0 -> 28151 bytes .../CSK_Module_MultiHTTPClient.css | 104 +- .../CSK_Module_MultiHTTPClient.html | 2358 ++++++++++------- .../pages/src/converter.ts | 61 + CSK_Module_MultiHTTPClient/pages/src/index.ts | 9 + CSK_Module_MultiHTTPClient/project.mf.xml | 89 +- .../scripts/CSK_Module_MultiHTTPClient.lua | 20 +- .../CSK_MultiHTTPClient_Processing.lua | 4 +- .../FlowConfig/MultiHTTPClient_FlowConfig.lua | 30 + .../MultiHTTPClient_SendRequest.lua | 65 + .../MultiHTTPClient_Controller.lua | 270 +- .../MultiHTTPClient/MultiHTTPClient_Model.lua | 13 +- .../MultiHTTPClient/helper/checkAPIs.lua | 16 +- README.md | 7 +- docu/CSK_Module_MultiHTTPClient.html | 1778 +++++++++---- docu/media/UI_Screenshot.png | Bin 69287 -> 61949 bytes docu/media/src/UI_sample.pptx | Bin 0 -> 83781 bytes 18 files changed, 3307 insertions(+), 1535 deletions(-) create mode 100644 CSK_Module_MultiHTTPClient/pages/assets/CSK_Module_MultiHTTPClient/UI_sample.png create mode 100644 CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/FlowConfig/MultiHTTPClient_FlowConfig.lua create mode 100644 CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/FlowConfig/MultiHTTPClient_SendRequest.lua create mode 100644 docu/media/src/UI_sample.pptx diff --git a/CHANGELOG.md b/CHANGELOG.md index a685a73..656ef68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog All notable changes to this project will be documented in this file. +## Release 2.0.0 + +### New features +- Supports FlowConfig feature to set source to forward via HTTP request +- Provide version of module via 'OnNewStatusModuleVersion' +- Function 'getParameters' to provide PersistentData parameters +- Check if features of module can be used on device and provide this via 'OnNewStatusModuleIsActive' event / 'getStatusModuleActive' function +- Function to 'resetModule' to default setup + +### Improvements +- Added parameters to 'addRequest'-function +- Added ENUMs for RequestMode +- New UI design available (e.g. selectable via CSK_Module_PersistentData v4.1.0 or higher), see 'OnNewStatusCSKStyle' +- check if instance exists if selected +- 'loadParameters' returns its success +- 'sendParameters' can control if sent data should be saved directly by CSK_Module_PersistentData +- Added UI icon and browser tab information + ## Release 1.0.0 - Initial commit \ No newline at end of file diff --git a/CSK_Module_MultiHTTPClient/pages/assets/CSK_Module_MultiHTTPClient/UI_sample.png b/CSK_Module_MultiHTTPClient/pages/assets/CSK_Module_MultiHTTPClient/UI_sample.png new file mode 100644 index 0000000000000000000000000000000000000000..25bd73d22d196e1a5bed3379fd0c3c5a859051b4 GIT binary patch literal 28151 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 literal 0 HcmV?d00001 diff --git a/CSK_Module_MultiHTTPClient/pages/pages/CSK_Module_MultiHTTPClient/CSK_Module_MultiHTTPClient.css b/CSK_Module_MultiHTTPClient/pages/pages/CSK_Module_MultiHTTPClient/CSK_Module_MultiHTTPClient.css index 44160ef..58b571e 100644 --- a/CSK_Module_MultiHTTPClient/pages/pages/CSK_Module_MultiHTTPClient/CSK_Module_MultiHTTPClient.css +++ b/CSK_Module_MultiHTTPClient/pages/pages/CSK_Module_MultiHTTPClient/CSK_Module_MultiHTTPClient.css @@ -1,14 +1,108 @@ +.myCustomMarginTop2px_CSK_Module_MultiHTTPClient { + margin-top: 2px; +} + +.myCustomMarginTop16px_CSK_Module_MultiHTTPClient { + margin-top: 16px; +} + +.myCustomSpacerVert10_CSK_Module_MultiHTTPClient { + min-height: 10px; +} + +.myCustomSpacerVert20_CSK_Module_MultiHTTPClient { + min-height: 20px; +} + +.myCustomFrameLabel_CSK_Module_MultiHTTPClient { + background: white; + position:relative; + top: calc(-1.2rem); + left: calc(1rem); + font-size: medium; +} + +.myCustomMargin99Percent_CSK_Module_MultiHTTPClient { + margin: calc(1rem); + margin-top: 20px; +} + +.myCustomMarginFirstRow_CSK_Module_MultiHTTPClient { + margin-top: -49px; +} + +.myCustomMarginLeft30PX_CSK_Module_MultiHTTPClient { + margin-left:30px; +} + +.myCustomMarginLeft-30PX_CSK_Module_MultiHTTPClient { + margin-left:-30px; +} + +.myCustomPersistentDataMargin_CSK_Module_MultiHTTPClient { + margin-top: -53px; + margin-left: 130px; +} + +.myCustomPersistentDataMarginBack_CSK_Module_MultiHTTPClient { + margin-left: -127px; +} + +.myCustomBorderBottom_CSK_Module_MultiHTTPClient { + border-bottom: 1px solid lightgray; + margin-inline: calc(1rem); +} + +.myCustomBorderLeft_CSK_Module_MultiHTTPClient { + border-left: 1px solid lightgray; +} + +.myCustomTabFrame_CSK_Module_MultiHTTPClient { + width: 98%; + align-self: center; +} + +.myCustomLabel_CSK_Module_MultiHTTPClient { + font-size:30px; + color: grey; + margin-top: 10px; +} + +.myCustomFrameNoColor_CSK_Module_MultiHTTPClient { + margin: 6px; + border-radius: 10px; + border-style: solid; + border-width: 0px; + border-color: 007CC1; + background-color: #FFFFFF; +} + .myCustomFrame_CSK_Module_MultiHTTPClient { + margin: 6px; + border-radius: 10px; border-style: solid; border-width: 1px; - border-color: grey; + border-color: #007CC1; + background-color: white; +} + +.myCustomFrameNoColor_CSK_Module_MultiHTTPClient { margin: 6px; + border-radius: 10px; + border-style: solid; + border-width: 0px; + border-color: 007CC1; + background-color: white; } -.myCustomMarginTop2px_CSK_Module_MultiHTTPClient { - margin-top: 2px; +.myCustomMarginTop7PX_CSK_Module_MultiHTTPClient { + margin-top: 7px; } -.myCustomMarginTop16px_CSK_Module_MultiHTTPClient { - margin-top: 16px; +.myCustomBackground_CSK_Module_MultiHTTPClient { +} + +.myCustomButton_CSK_Module_MultiHTTPClient { + border-radius: 30px; + padding-right: 0px; } \ No newline at end of file diff --git a/CSK_Module_MultiHTTPClient/pages/pages/CSK_Module_MultiHTTPClient/CSK_Module_MultiHTTPClient.html b/CSK_Module_MultiHTTPClient/pages/pages/CSK_Module_MultiHTTPClient/CSK_Module_MultiHTTPClient.html index b10a0e3..4d5a266 100644 --- a/CSK_Module_MultiHTTPClient/pages/pages/CSK_Module_MultiHTTPClient/CSK_Module_MultiHTTPClient.html +++ b/CSK_Module_MultiHTTPClient/pages/pages/CSK_Module_MultiHTTPClient/CSK_Module_MultiHTTPClient.html @@ -1,952 +1,1406 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CA bundle(.pem) - - - - - - - - - - - - - - - - pem - - - der - - - pkcs#12 - - - - - - Client certificate - - - - - - - - - - - - - - - - pem - - - der - - - - - - Client certificate key - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Load Config - - - - - - - - - Save Config - - - - - - - - - - - - - - - - - - - - - - - - - - GET - - - POST - - - HEAD - - - PUT - - - PATCH - - - DELETE - - - TRACE - - - OPTIONS - - - - - - - - - - - - - - - - - - - - - - - - - - Send - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Add - - - - - - - Delete - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Periodic - - - - - - - - - - - - - - - - - - - - - - - Add/Edit request - - - - - - - Remove request - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Add instance - - - - - Reset instances - - - - - - - - - - - - - - - - Please log in via UserManagement module. - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CA bundle(.pem) + + + + + + + + + + + + + + + + pem + + + der + + + pkcs#12 + + + + + + Client certificate + + + + + + + + + + + + + + + + pem + + + der + + + + + + Client certificate key + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GET + + + POST + + + HEAD + + + PUT + + + PATCH + + + DELETE + + + TRACE + + + OPTIONS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Periodic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Please log in via UserManagement module. + + + + + + + + + + + + Module is not supported on this device... + + UI sample + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CSK_Module_MultiHTTPClient/pages/src/converter.ts b/CSK_Module_MultiHTTPClient/pages/src/converter.ts index 5556714..1e187a9 100644 --- a/CSK_Module_MultiHTTPClient/pages/src/converter.ts +++ b/CSK_Module_MultiHTTPClient/pages/src/converter.ts @@ -1,3 +1,64 @@ export function convertToList(value) { return JSON.parse(value) +} + +export function changeStyle(theme) { + const style: HTMLStyleElement = document.createElement('style'); + style.id ='blub' + if (theme == 'CSK_Style'){ + var headerToolbar = `.sopasjs-ui-header-toolbar-wrapper { background-color: #FFFFFF; }` + var uiHeader = `.sopasjs-ui-header>.app-logo { margin-right:0px; }` + var appLogo = `.app-logo { background-color:#FFFFFF; background-image: url(data:image/png;base64,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) }` + var uiNavbar =`.sopasjs-ui-navbar-wrapper { background-color: #737F85; }` + var navbarMenuLiActive = `.sopasjs-navbar-menu>li.active { background-color: #283c45; }` + var navbarMenuLiActiveA = `.sopasjs-navbar-menu>li.active>a { background-color: #283c45; }` + var navbarMeluLi = `.sopasjs-navbar-menu>li { color: #FFFFFF; }` + var navbarMeluLiA = `.sopasjs-navbar-menu>li>a { color: #FFFFFF; }` + var headerToolbarButtonHighlight = `.sopasjs-ui-header-toolbar-button.sopasjs-ui-navigation-navbutton>a.highlight { background-color: #737F85; }` + var toolbarButton = `.sopasjs-ui-header-toolbar-button>a { color: #283c45; }` + + var customBackground = `.CSK_Module_MultiHTTPClient .myCustomBackground_CSK_Module_MultiHTTPClient { background-color: #737F8522; }` // font-family: "Open Sans"; }` + + style.innerHTML = headerToolbar; + style.innerHTML += uiHeader; + style.innerHTML += appLogo; + style.innerHTML += uiNavbar; + style.innerHTML += navbarMenuLiActive; + style.innerHTML += navbarMenuLiActiveA; + style.innerHTML += navbarMeluLi; + style.innerHTML += navbarMeluLiA; + style.innerHTML += headerToolbarButtonHighlight; + style.innerHTML += toolbarButton; + + style.innerHTML += customBackground; + } + else if (theme == 'None'){ + var headerToolbar = `.sopasjs-ui-header-toolbar-wrapper { background-color: #007fc3; }` + var uiHeader = `.sopasjs-ui-header>.app-logo { margin-right:10px; }` + var appLogo = `.app-logo { background-color:#007fc3; background-image: url('data:image/png;base64,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') }` + var uiNavbar =`.sopasjs-ui-navbar-wrapper { background-color: #f6f8f9; }` + var navbarMenuLiActive = `.sopasjs-navbar-menu>li.active { background-color: #007fc3; }` + var navbarMenuLiActiveA = `.sopasjs-navbar-menu>li.active>a { background-color: #007fc3; }` + var navbarMeluLi = `.sopasjs-navbar-menu>li { color: #697987; }` + var navbarMeluLiA = `.sopasjs-navbar-menu>li>a { color: #505f6b; }` + var headerToolbarButtonHighlight = `.sopasjs-ui-header-toolbar-button.sopasjs-ui-navigation-navbutton>a.highlight { background-color: #006093; }` + var toolbarButton = `.sopasjs-ui-header-toolbar-button>a { color: #cce5f3; }` + + var customBackground = `.CSK_Module_MultiHTTPClient .myCustomBackground_CSK_Module_MultiHTTPClient { background-color: #fff; }` // font-family: "sans-serif"; }` + + style.innerHTML = headerToolbar; + style.innerHTML += uiHeader; + style.innerHTML += appLogo; + style.innerHTML += uiNavbar; + style.innerHTML += navbarMenuLiActive; + style.innerHTML += navbarMenuLiActiveA; + style.innerHTML += navbarMeluLi; + style.innerHTML += navbarMeluLiA; + style.innerHTML += headerToolbarButtonHighlight; + style.innerHTML += toolbarButton; + + style.innerHTML += customBackground; + } + document.head.append(style); + return theme } \ No newline at end of file diff --git a/CSK_Module_MultiHTTPClient/pages/src/index.ts b/CSK_Module_MultiHTTPClient/pages/src/index.ts index e69de29..8979f5d 100644 --- a/CSK_Module_MultiHTTPClient/pages/src/index.ts +++ b/CSK_Module_MultiHTTPClient/pages/src/index.ts @@ -0,0 +1,9 @@ +document.addEventListener('sopasjs-ready', () => { + const page_1 = document.querySelector('div.sopasjs-ui-navbar-wrapper > div > ul > li:nth-child(3) > a > i'); + page_1.classList.remove('fa-file'); + page_1.classList.add('fa-cloud'); + + setTimeout(() => { + document.title = 'CSK_Module_MultiHTTPClient' + }, 500); +}) \ No newline at end of file diff --git a/CSK_Module_MultiHTTPClient/project.mf.xml b/CSK_Module_MultiHTTPClient/project.mf.xml index 074c9bb..590100d 100644 --- a/CSK_Module_MultiHTTPClient/project.mf.xml +++ b/CSK_Module_MultiHTTPClient/project.mf.xml @@ -36,6 +36,17 @@ It is possible to prepare and save multiple requests per instance. There are som {empty} + **4) Receive response** + The module will dynamically create events to provide the incoming response of the executed requests. Please check the 'OnNewResponseNUM' / 'OnNewResponseNUM_NAME'-event documentation. + + + Mode of HTTP request. + GET + POST + HEAD + PUT + PATCH + DELETE + TRACE + OPTIONS + Notify status if parameters should be loaded on app/device boot up. @@ -243,15 +254,29 @@ INFO: Other modules can check via "Script.isServedAsEvent" if event of sepecific Notify filename to use for cookie store. + + Notify if FlowConfig should have priority for FlowConfig relevant configurations. + + + + Notify UI style to use for CSK modules. + + + + Notify version of module. + + + + Notify if module can be used on device. + + Function to set the name of the parameters if saved/loaded via the CSK_PersistentData module. Send parameters to CSK_PersistentData module if possible to save them. - - - Load parameters for this module from the CSK_PersistentData module if possible and use them. + Configure if this module should load its saved parameters at app / device boot up. @@ -372,6 +397,13 @@ IMPORTANT: As instances start their own threads, the module needs to be restarte Function to add new request based on preconfigured parameters. + + + + + + + Function to trigger preconfigured request via UI. @@ -438,10 +470,59 @@ IMPORTANT: As instances start their own threads, the module needs to be restarte Function to set filename for cookie storage. + + Function to clear FlowConfig relevant configurations. + + + Function to configure if FlowConfig should have priority for FlowConfig relevant configuration. + + + + Function to get status if module is active. + + + + Load parameters for this module from the CSK_PersistentData module if possible and use them. + + + + released + Function to get all parameters of the client in JSON format. + + + + + Function to reset main configuration of module. + + + released + Crown to provide CSK_FlowConfig relevant features. + + + Forward data via HTTP request. + + + Internally used CSK_FlowConfig create function. + + + + + + + + + data-flow + Set source of incoming data to forward via HTTP request. + + + + + + SICK AG - 1.0.0 + 2.0.0 low false false diff --git a/CSK_Module_MultiHTTPClient/scripts/CSK_Module_MultiHTTPClient.lua b/CSK_Module_MultiHTTPClient/scripts/CSK_Module_MultiHTTPClient.lua index d715a0f..7c2a9c3 100644 --- a/CSK_Module_MultiHTTPClient/scripts/CSK_Module_MultiHTTPClient.lua +++ b/CSK_Module_MultiHTTPClient/scripts/CSK_Module_MultiHTTPClient.lua @@ -22,16 +22,13 @@ ---@diagnostic disable: undefined-global, redundant-parameter, missing-parameter --- --- CreationTemplateVersion: 3.6.0 --************************************************************************** --**********************Start Global Scope ********************************* --************************************************************************** - -- If app property "LuaLoadAllEngineAPI" is FALSE, use this to load and check for required APIs -- This can improve performance of garbage collection - _G.availableAPIs = require('Communication/MultiHTTPClient/helper/checkAPIs') -- can be used to adjust function scope of the module related on available APIs of the device + ----------------------------------------------------------- -- Logger _G.logger = Log.SharedLogger.create('ModuleLogger') @@ -47,12 +44,19 @@ _G.logHandle:applyConfig() local multiHTTPClient_Model = require('Communication/MultiHTTPClient/MultiHTTPClient_Model') local multiHTTPClient_Instances = {} -- Handle all instances -table.insert(multiHTTPClient_Instances, multiHTTPClient_Model.create(1)) -- Create at least 1 instance -- Load script to communicate with the MultiHTTPClient_Model UI -- Check / edit this script to see/edit functions which communicate with the UI local multiHTTPClientController = require('Communication/MultiHTTPClient/MultiHTTPClient_Controller') -multiHTTPClientController.setMultiHTTPClient_Instances_Handle(multiHTTPClient_Instances) -- share handle of instances + +if _G.availableAPIs.default and _G.availableAPIs.specific then + local setInstanceHandle = require('Communication/MultiHTTPClient/FlowConfig/MultiHTTPClient_FlowConfig') + table.insert(multiHTTPClient_Instances, multiHTTPClient_Model.create(1)) -- Create at least 1 instance + multiHTTPClientController.setMultiHTTPClient_Instances_Handle(multiHTTPClient_Instances) -- share handle of instances + setInstanceHandle(multiHTTPClient_Instances) +else + _G.logger:warning("CSK_MultiHTTPClient: Relevant CROWN(s) not available on device. Module is not supported...") +end --************************************************************************** --**********************End Global Scope *********************************** @@ -97,7 +101,9 @@ local function main() ---------------------------------------------------------------------------------------- --setup() --> just for docu, see above - CSK_MultiHTTPClient.setSelectedInstance(1) + if _G.availableAPIs.default and _G.availableAPIs.specific then + CSK_MultiHTTPClient.setSelectedInstance(1) + end CSK_MultiHTTPClient.pageCalled() -- Update UI end diff --git a/CSK_Module_MultiHTTPClient/scripts/CSK_MultiHTTPClient_Processing.lua b/CSK_Module_MultiHTTPClient/scripts/CSK_MultiHTTPClient_Processing.lua index 7450fa7..8e502dc 100644 --- a/CSK_Module_MultiHTTPClient/scripts/CSK_MultiHTTPClient_Processing.lua +++ b/CSK_Module_MultiHTTPClient/scripts/CSK_MultiHTTPClient_Processing.lua @@ -122,7 +122,7 @@ local function updateClient() if processingParams.clientAuthentication then if File.exists(processingParams.caBundleFileName) then clientObject:setCABundle(processingParams.caBundleFileName) - _G.logger:info(nameOfModule .. ": CA_Bundle active.") + _G.logger:fine(nameOfModule .. ": CA_Bundle active.") else _G.logger:warning(nameOfModule .. ": No CA_Bundle file available.") end @@ -133,7 +133,7 @@ local function updateClient() else clientObject:setClientCertificate(processingParams.clientCertificateFileName .. processingParams.clientCertificateType, processingParams.clientCertificateKeyFileName .. processingParams.clientCertificateKeyType) end - _G.logger:info(nameOfModule .. ": Client authentication active.") + _G.logger:fine(nameOfModule .. ": Client authentication active.") else _G.logger:warning(nameOfModule .. ": No client authentication files available.") end diff --git a/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/FlowConfig/MultiHTTPClient_FlowConfig.lua b/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/FlowConfig/MultiHTTPClient_FlowConfig.lua new file mode 100644 index 0000000..f3a0f71 --- /dev/null +++ b/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/FlowConfig/MultiHTTPClient_FlowConfig.lua @@ -0,0 +1,30 @@ +--***************************************************************** +-- Here you will find all the required content to provide specific +-- features of this module via the 'CSK FlowConfig'. +--***************************************************************** + +require('Communication.MultiHTTPClient.FlowConfig.MultiHTTPClient_SendRequest') + +-- Reference to the multiHTTPClient_Instances handle +local multiHTTPClient_Instances + +--- Function to react if FlowConfig was updated +local function handleOnClearOldFlow() + if _G.availableAPIs.default and _G.availableAPIs.specific then + for i = 1, # multiHTTPClient_Instances do + if multiHTTPClient_Instances[i].parameters.flowConfigPriority then + CSK_MultiHTTPClient.clearFlowConfigRelevantConfiguration() + break + end + end + end +end +Script.register('CSK_FlowConfig.OnClearOldFlow', handleOnClearOldFlow) + +--- Function to get access to the multiHTTPClient_Instances +---@param handle handle Handle of multiHTTPClient_Instances object +local function setMultiHTTPClient_Instances_Handle(handle) + multiHTTPClient_Instances = handle +end + +return setMultiHTTPClient_Instances_Handle \ No newline at end of file diff --git a/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/FlowConfig/MultiHTTPClient_SendRequest.lua b/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/FlowConfig/MultiHTTPClient_SendRequest.lua new file mode 100644 index 0000000..1078b81 --- /dev/null +++ b/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/FlowConfig/MultiHTTPClient_SendRequest.lua @@ -0,0 +1,65 @@ +-- Block namespace +local BLOCK_NAMESPACE = 'MultiHTTPClient_FC.SendRequest' +local nameOfModule = 'CSK_MultiHTTPClient' + +--************************************************************* +--************************************************************* + +-- Required to keep track of already allocated resource +local instanceTable = {} + +local function sendRequest(handle, source) + + local instance = Container.get(handle, 'Instance') + local requestName = Container.get(handle, 'RequestName') + local mode = Container.get(handle, 'Mode') + local endpoint = Container.get(handle, 'Endpoint') + local port = Container.get(handle, 'Port') + + -- Check if amount of instances is valid + -- if not: add multiple additional instances + while true do + local amount = CSK_MultiHTTPClient.getInstancesAmount() + if amount < instance then + CSK_MultiHTTPClient.addInstance() + else + CSK_MultiHTTPClient.setSelectedInstance(instance) + + CSK_MultiHTTPClient.addRequest(requestName, mode, endpoint, port, source, false) + break + end + end +end +Script.serveFunction(BLOCK_NAMESPACE .. '.sendRequest', sendRequest) + +--************************************************************* +--************************************************************* + +local function create(instance, requestName, mode, endpoint, port) + + local fullInstanceName = tostring(instance) .. tostring(requestName) + + -- Check if same instance is already configured + if instance < 1 or nil ~= instanceTable[fullInstanceName] then + _G.logger:warning(nameOfModule .. ': Instance invalid or already in use, please choose another one') + return nil + else + -- Otherwise create handle and store the restriced resource + local handle = Container.create() + instanceTable[instance] = instance + Container.add(handle, 'Instance', instance) + Container.add(handle, 'RequestName', requestName) + Container.add(handle, 'Mode', mode) + Container.add(handle, 'Endpoint', endpoint) + Container.add(handle, 'Port', port) + return handle + end +end +Script.serveFunction(BLOCK_NAMESPACE .. '.create', create) + +--- Function to reset instances if FlowConfig was cleared +local function handleOnClearOldFlow() + Script.releaseObject(instanceTable) + instanceTable = {} +end +Script.register('CSK_FlowConfig.OnClearOldFlow', handleOnClearOldFlow) \ No newline at end of file diff --git a/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/MultiHTTPClient_Controller.lua b/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/MultiHTTPClient_Controller.lua index 22cd1bb..29acc4c 100644 --- a/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/MultiHTTPClient_Controller.lua +++ b/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/MultiHTTPClient_Controller.lua @@ -38,6 +38,9 @@ Script.serveEvent("CSK_MultiHTTPClient.OnNewValueUpdateNUM", "MultiHTTPClient_On -- Real events -------------------------------------------------- +Script.serveEvent('CSK_MultiHTTPClient.OnNewStatusModuleVersion', 'MultiHTTPClient_OnNewStatusModuleVersion') +Script.serveEvent('CSK_MultiHTTPClient.OnNewStatusCSKStyle', 'MultiHTTPClient_OnNewStatusCSKStyle') +Script.serveEvent('CSK_MultiHTTPClient.OnNewStatusModuleIsActive', 'MultiHTTPClient_OnNewStatusModuleIsActive') Script.serveEvent('CSK_MultiHTTPClient.OnNewStatusClientActivated', 'MultiHTTPClient_OnNewStatusClientActivated') Script.serveEvent('CSK_MultiHTTPClient.OnNewStatusClientAuthentication', 'MultiHTTPClient_OnNewStatusClientAuthentication') @@ -80,6 +83,7 @@ Script.serveEvent('CSK_MultiHTTPClient.OnNewStatusExtendedResponse', 'MultiHTTPC Script.serveEvent("CSK_MultiHTTPClient.OnNewStatusLoadParameterOnReboot", "MultiHTTPClient_OnNewStatusLoadParameterOnReboot") Script.serveEvent("CSK_MultiHTTPClient.OnPersistentDataModuleAvailable", "MultiHTTPClient_OnPersistentDataModuleAvailable") Script.serveEvent("CSK_MultiHTTPClient.OnNewParameterName", "MultiHTTPClient_OnNewParameterName") +Script.serveEvent('CSK_MultiHTTPClient.OnNewStatusFlowConfigPriority', 'MultiHTTPClient_OnNewStatusFlowConfigPriority') Script.serveEvent("CSK_MultiHTTPClient.OnNewInstanceList", "MultiHTTPClient_OnNewInstanceList") Script.serveEvent("CSK_MultiHTTPClient.OnNewProcessingParameter", "MultiHTTPClient_OnNewProcessingParameter") @@ -268,79 +272,93 @@ end --- Function to send all relevant values to UI on resume local function handleOnExpiredTmrMultiHTTPClient() - updateUserLevel() + Script.notifyEvent("MultiHTTPClient_OnNewStatusModuleVersion", multiHTTPClient_Model.version) + Script.notifyEvent("MultiHTTPClient_OnNewStatusCSKStyle", multiHTTPClient_Model.styleForUI) + Script.notifyEvent("MultiHTTPClient_OnNewStatusModuleIsActive", _G.availableAPIs.default and _G.availableAPIs.specific) - Script.notifyEvent("MultiHTTPClient_OnNewInstanceList", helperFuncs.createStringListBySize(#multiHTTPClient_Instances)) - Script.notifyEvent('MultiHTTPClient_OnNewSelectedInstance', selectedInstance) - Script.notifyEvent('MultiHTTPClient_OnNewInterfaceDropdown', createInterfaceList()) - Script.notifyEvent('MultiHTTPClient_OnNewInterface', multiHTTPClient_Instances[selectedInstance].parameters.interface) + if _G.availableAPIs.default and _G.availableAPIs.specific then - Script.notifyEvent('MultiHTTPClient_OnNewStatusClientActivated', multiHTTPClient_Instances[selectedInstance].parameters.clientActivated) - Script.notifyEvent('MultiHTTPClient_OnNewStatusClientAuthentication', multiHTTPClient_Instances[selectedInstance].parameters.clientAuthentication) - - Script.notifyEvent('MultiHTTPClient_OnNewClientCertificateType', multiHTTPClient_Instances[selectedInstance].parameters.clientCertificateType) - Script.notifyEvent('MultiHTTPClient_OnNewClientCertificateKeyType', multiHTTPClient_Instances[selectedInstance].parameters.clientCertificateKeyType) - Script.notifyEvent('MultiHTTPClient_OnNewCookieStore', multiHTTPClient_Instances[selectedInstance].parameters.cookieStore) - - Script.notifyEvent('MultiHTTPClient_OnNewProxyEnableStatus', multiHTTPClient_Instances[selectedInstance].parameters.proxyEnabled) - Script.notifyEvent('MultiHTTPClient_OnNewProxyUsername', multiHTTPClient_Instances[selectedInstance].parameters.proxyUsername) - Script.notifyEvent('MultiHTTPClient_OnNewProxyPassword', multiHTTPClient_Instances[selectedInstance].parameters.proxyPassword) - Script.notifyEvent('MultiHTTPClient_OnNewProxyURL', multiHTTPClient_Instances[selectedInstance].parameters.proxyURL) - Script.notifyEvent('MultiHTTPClient_OnNewProxyPort', multiHTTPClient_Instances[selectedInstance].parameters.proxyPort) - Script.notifyEvent('MultiHTTPClient_OnNewVerboseMode', multiHTTPClient_Instances[selectedInstance].parameters.verboseMode) - Script.notifyEvent('MultiHTTPClient_OnNewQueueSize', multiHTTPClient_Instances[selectedInstance].parameters.queueSize) - Script.notifyEvent('MultiHTTPClient_OnNewHostnameVerification', multiHTTPClient_Instances[selectedInstance].parameters.hostnameVerification) - Script.notifyEvent('MultiHTTPClient_OnNewPeerVerification', multiHTTPClient_Instances[selectedInstance].parameters.peerVerification) - - Script.notifyEvent('MultiHTTPClient_OnNewRequestEndpoint', multiHTTPClient_Instances[selectedInstance].requestEndpoint) - Script.notifyEvent('MultiHTTPClient_OnNewRequestMode', multiHTTPClient_Instances[selectedInstance].requestMode) - Script.notifyEvent('MultiHTTPClient_OnNewRequestPort', multiHTTPClient_Instances[selectedInstance].requestPort) - - Script.notifyEvent('MultiHTTPClient_OnNewHeaderList', helperFuncs.createJsonList(multiHTTPClient_Instances[selectedInstance].headers)) - Script.notifyEvent('MultiHTTPClient_OnNewSelectedHeader', multiHTTPClient_Instances[selectedInstance].selectedHeaderKey) - if multiHTTPClient_Instances[selectedInstance].headers[multiHTTPClient_Instances[selectedInstance].selectedHeaderKey] then - Script.notifyEvent('MultiHTTPClient_OnNewHeaderKey', multiHTTPClient_Instances[selectedInstance].headerKey) - Script.notifyEvent('MultiHTTPClient_OnNewHeaderValue', multiHTTPClient_Instances[selectedInstance].headerValue) - else - Script.notifyEvent('MultiHTTPClient_OnNewHeaderKey', '') - Script.notifyEvent('MultiHTTPClient_OnNewHeaderValue', '') - end + updateUserLevel() + + Script.notifyEvent("MultiHTTPClient_OnNewInstanceList", helperFuncs.createStringListBySize(#multiHTTPClient_Instances)) + Script.notifyEvent('MultiHTTPClient_OnNewSelectedInstance', selectedInstance) + Script.notifyEvent('MultiHTTPClient_OnNewInterfaceDropdown', createInterfaceList()) + Script.notifyEvent('MultiHTTPClient_OnNewInterface', multiHTTPClient_Instances[selectedInstance].parameters.interface) + + Script.notifyEvent('MultiHTTPClient_OnNewStatusClientActivated', multiHTTPClient_Instances[selectedInstance].parameters.clientActivated) + Script.notifyEvent('MultiHTTPClient_OnNewStatusClientAuthentication', multiHTTPClient_Instances[selectedInstance].parameters.clientAuthentication) + + Script.notifyEvent('MultiHTTPClient_OnNewClientCertificateType', multiHTTPClient_Instances[selectedInstance].parameters.clientCertificateType) + Script.notifyEvent('MultiHTTPClient_OnNewClientCertificateKeyType', multiHTTPClient_Instances[selectedInstance].parameters.clientCertificateKeyType) + Script.notifyEvent('MultiHTTPClient_OnNewCookieStore', multiHTTPClient_Instances[selectedInstance].parameters.cookieStore) + + Script.notifyEvent('MultiHTTPClient_OnNewProxyEnableStatus', multiHTTPClient_Instances[selectedInstance].parameters.proxyEnabled) + Script.notifyEvent('MultiHTTPClient_OnNewProxyUsername', multiHTTPClient_Instances[selectedInstance].parameters.proxyUsername) + Script.notifyEvent('MultiHTTPClient_OnNewProxyPassword', multiHTTPClient_Instances[selectedInstance].parameters.proxyPassword) + Script.notifyEvent('MultiHTTPClient_OnNewProxyURL', multiHTTPClient_Instances[selectedInstance].parameters.proxyURL) + Script.notifyEvent('MultiHTTPClient_OnNewProxyPort', multiHTTPClient_Instances[selectedInstance].parameters.proxyPort) + Script.notifyEvent('MultiHTTPClient_OnNewVerboseMode', multiHTTPClient_Instances[selectedInstance].parameters.verboseMode) + Script.notifyEvent('MultiHTTPClient_OnNewQueueSize', multiHTTPClient_Instances[selectedInstance].parameters.queueSize) + Script.notifyEvent('MultiHTTPClient_OnNewHostnameVerification', multiHTTPClient_Instances[selectedInstance].parameters.hostnameVerification) + Script.notifyEvent('MultiHTTPClient_OnNewPeerVerification', multiHTTPClient_Instances[selectedInstance].parameters.peerVerification) + + Script.notifyEvent('MultiHTTPClient_OnNewRequestEndpoint', multiHTTPClient_Instances[selectedInstance].requestEndpoint) + Script.notifyEvent('MultiHTTPClient_OnNewRequestMode', multiHTTPClient_Instances[selectedInstance].requestMode) + Script.notifyEvent('MultiHTTPClient_OnNewRequestPort', multiHTTPClient_Instances[selectedInstance].requestPort) + + Script.notifyEvent('MultiHTTPClient_OnNewHeaderList', helperFuncs.createJsonList(multiHTTPClient_Instances[selectedInstance].headers)) + Script.notifyEvent('MultiHTTPClient_OnNewSelectedHeader', multiHTTPClient_Instances[selectedInstance].selectedHeaderKey) + if multiHTTPClient_Instances[selectedInstance].headers[multiHTTPClient_Instances[selectedInstance].selectedHeaderKey] then + Script.notifyEvent('MultiHTTPClient_OnNewHeaderKey', multiHTTPClient_Instances[selectedInstance].headerKey) + Script.notifyEvent('MultiHTTPClient_OnNewHeaderValue', multiHTTPClient_Instances[selectedInstance].headerValue) + else + Script.notifyEvent('MultiHTTPClient_OnNewHeaderKey', '') + Script.notifyEvent('MultiHTTPClient_OnNewHeaderValue', '') + end - Script.notifyEvent('MultiHTTPClient_OnNewStatusRequestContentDisabled', multiHTTPClient_Instances[selectedInstance].requestMode == ('GET' or 'DELETE')) - Script.notifyEvent('MultiHTTPClient_OnNewRequestContent', multiHTTPClient_Instances[selectedInstance].requestContent) - Script.notifyEvent('MultiHTTPClient_OnNewRequestContentType', multiHTTPClient_Instances[selectedInstance].requestContentType) + Script.notifyEvent('MultiHTTPClient_OnNewStatusRequestContentDisabled', multiHTTPClient_Instances[selectedInstance].requestMode == ('GET' or 'DELETE')) + Script.notifyEvent('MultiHTTPClient_OnNewRequestContent', multiHTTPClient_Instances[selectedInstance].requestContent) + Script.notifyEvent('MultiHTTPClient_OnNewRequestContentType', multiHTTPClient_Instances[selectedInstance].requestContentType) - Script.notifyEvent('MultiHTTPClient_OnNewStatusExtendedResponse', multiHTTPClient_Instances[selectedInstance].parameters.extendedResponse) - Script.notifyEvent('MultiHTTPClient_OnNewResponseMessage', '') + Script.notifyEvent('MultiHTTPClient_OnNewStatusExtendedResponse', multiHTTPClient_Instances[selectedInstance].parameters.extendedResponse) + Script.notifyEvent('MultiHTTPClient_OnNewResponseMessage', '') - Script.notifyEvent('MultiHTTPClient_OnNewRequestName', multiHTTPClient_Instances[selectedInstance].requestName) - Script.notifyEvent("MultiHTTPClient_OnNewStatusRegisteredEvent", multiHTTPClient_Instances[selectedInstance].registeredEvent) - Script.notifyEvent('MultiHTTPClient_OnNewRequestPeriodicStatus', multiHTTPClient_Instances[selectedInstance].requestPeriodic) - Script.notifyEvent('MultiHTTPClient_OnNewRequestPeriod', multiHTTPClient_Instances[selectedInstance].requestPeriod) - Script.notifyEvent('MultiHTTPClient_OnNewRequestsTable', getRequestsTableContent()) + Script.notifyEvent('MultiHTTPClient_OnNewRequestName', multiHTTPClient_Instances[selectedInstance].requestName) + Script.notifyEvent("MultiHTTPClient_OnNewStatusRegisteredEvent", multiHTTPClient_Instances[selectedInstance].registeredEvent) + Script.notifyEvent('MultiHTTPClient_OnNewRequestPeriodicStatus', multiHTTPClient_Instances[selectedInstance].requestPeriodic) + Script.notifyEvent('MultiHTTPClient_OnNewRequestPeriod', multiHTTPClient_Instances[selectedInstance].requestPeriod) + Script.notifyEvent('MultiHTTPClient_OnNewRequestsTable', getRequestsTableContent()) - Script.notifyEvent("MultiHTTPClient_OnNewStatusLoadParameterOnReboot", multiHTTPClient_Instances[selectedInstance].parameterLoadOnReboot) - Script.notifyEvent("MultiHTTPClient_OnPersistentDataModuleAvailable", multiHTTPClient_Instances[selectedInstance].persistentModuleAvailable) - Script.notifyEvent("MultiHTTPClient_OnNewParameterName", multiHTTPClient_Instances[selectedInstance].parametersName) + Script.notifyEvent("MultiHTTPClient_OnNewStatusLoadParameterOnReboot", multiHTTPClient_Instances[selectedInstance].parameterLoadOnReboot) + Script.notifyEvent("MultiHTTPClient_OnPersistentDataModuleAvailable", multiHTTPClient_Instances[selectedInstance].persistentModuleAvailable) + Script.notifyEvent("MultiHTTPClient_OnNewParameterName", multiHTTPClient_Instances[selectedInstance].parametersName) + Script.notifyEvent("MultiHTTPClient_OnNewStatusFlowConfigPriority", multiHTTPClient_Instances[selectedInstance].parameters.flowConfigPriority) + end end Timer.register(tmrMultiHTTPClient, "OnExpired", handleOnExpiredTmrMultiHTTPClient) -- ********************* UI Setting / Submit Functions Start ******************** local function pageCalled() - updateUserLevel() -- try to hide user specific content asap + if _G.availableAPIs.default and _G.availableAPIs.specific then + updateUserLevel() -- try to hide user specific content asap + end tmrMultiHTTPClient:start() return '' end Script.serveFunction("CSK_MultiHTTPClient.pageCalled", pageCalled) local function setSelectedInstance(instance) - selectedInstance = instance - _G.logger:fine(nameOfModule .. ": New selected instance = " .. tostring(selectedInstance)) - multiHTTPClient_Instances[selectedInstance].activeInUI = true - Script.notifyEvent('MultiHTTPClient_OnNewProcessingParameter', selectedInstance, 'activeInUI', true) - multiHTTPClient_Instances[selectedInstance].selectedRequest = nil - handleOnExpiredTmrMultiHTTPClient() + if #multiHTTPClient_Instances >= instance then + selectedInstance = instance + _G.logger:fine(nameOfModule .. ": New selected instance = " .. tostring(selectedInstance)) + multiHTTPClient_Instances[selectedInstance].activeInUI = true + Script.notifyEvent('MultiHTTPClient_OnNewProcessingParameter', selectedInstance, 'activeInUI', true) + multiHTTPClient_Instances[selectedInstance].selectedRequest = nil + handleOnExpiredTmrMultiHTTPClient() + else + _G.logger:warning(nameOfModule .. ": Selected instance does not exist.") + end end Script.serveFunction("CSK_MultiHTTPClient.setSelectedInstance", setSelectedInstance) @@ -720,12 +738,22 @@ local function createRequestParameters() return requestParameters end -local function addRequest() - if multiHTTPClient_Instances[selectedInstance].requestName ~= '' then - if multiHTTPClient_Instances[selectedInstance].parameters.requests[multiHTTPClient_Instances[selectedInstance].requestName] then +local function addRequest(name, mode, endpoint, port, event, periodic, period) + + if name ~= '' then + if multiHTTPClient_Instances[selectedInstance].parameters.requests[name] then _G.logger:fine(nameOfModule .. ": Request with this name already exists.") else _G.logger:fine(nameOfModule .. ": Add request to instance" .. tostring(selectedInstance)) + + multiHTTPClient_Instances[selectedInstance].requestName = name + multiHTTPClient_Instances[selectedInstance].requestMode = mode + multiHTTPClient_Instances[selectedInstance].requestEndpoint = 'http://' .. endpoint + multiHTTPClient_Instances[selectedInstance].requestPort = port + multiHTTPClient_Instances[selectedInstance].registeredEvent = event or '' + multiHTTPClient_Instances[selectedInstance].requestPeriodic = periodic + multiHTTPClient_Instances[selectedInstance].requestPeriod = period or 0 + local requestToAdd = createRequestParameters() multiHTTPClient_Instances[selectedInstance].parameters.requests[multiHTTPClient_Instances[selectedInstance].requestName] = requestToAdd @@ -761,7 +789,7 @@ local function addEditRequestViaUI() _G.logger:fine(nameOfModule .. ": Not possible to change request name. Delete request and create a new one.") end else - addRequest() + addRequest(multiHTTPClient_Instances[selectedInstance].requestName, multiHTTPClient_Instances[selectedInstance].requestMode, multiHTTPClient_Instances[selectedInstance].requestEndpoint, multiHTTPClient_Instances[selectedInstance].requestPort, multiHTTPClient_Instances[selectedInstance].registeredEvent, multiHTTPClient_Instances[selectedInstance].requestPeriodic, multiHTTPClient_Instances[selectedInstance].requestPeriod) end handleOnExpiredTmrMultiHTTPClient() end @@ -859,6 +887,30 @@ local function resetInstances() end Script.serveFunction('CSK_MultiHTTPClient.resetInstances', resetInstances) +local function getStatusModuleActive() + return _G.availableAPIs.default and _G.availableAPIs.specific +end +Script.serveFunction('CSK_MultiHTTPClient.getStatusModuleActive', getStatusModuleActive) + +local function clearFlowConfigRelevantConfiguration() + for i = 1, #multiHTTPClient_Instances do + for key, value in pairs(multiHTTPClient_Instances[i].parameters.requests) do + setSelectedRequest(key) + removeRequest() + end + end +end +Script.serveFunction('CSK_MultiHTTPClient.clearFlowConfigRelevantConfiguration', clearFlowConfigRelevantConfiguration) + +local function getParameters(instanceNo) + if instanceNo <= #multiHTTPClient_Instances then + return helperFuncs.json.encode(multiHTTPClient_Instances[instanceNo].parameters) + else + return '' + end +end +Script.serveFunction('CSK_MultiHTTPClient.getParameters', getParameters) + -- ***************************************************************** -- Following function can be adapted for CSK_PersistentData module usage -- ***************************************************************** @@ -869,7 +921,7 @@ local function setParameterName(name) end Script.serveFunction("CSK_MultiHTTPClient.setParameterName", setParameterName) -local function sendParameters() +local function sendParameters(noDataSave) if multiHTTPClient_Instances[selectedInstance].persistentModuleAvailable then CSK_PersistentData.addParameter(helperFuncs.convertTable2Container(multiHTTPClient_Instances[selectedInstance].parameters), multiHTTPClient_Instances[selectedInstance].parametersName) @@ -880,7 +932,9 @@ local function sendParameters() CSK_PersistentData.setModuleParameterName(nameOfModule, multiHTTPClient_Instances[selectedInstance].parametersName, multiHTTPClient_Instances[selectedInstance].parameterLoadOnReboot, tostring(selectedInstance)) end _G.logger:fine(nameOfModule .. ": Send MultiHTTPClient parameters with name '" .. multiHTTPClient_Instances[selectedInstance].parametersName .. "' to CSK_PersistentData module.") - CSK_PersistentData.saveData() + if not noDataSave then + CSK_PersistentData.saveData() + end else _G.logger:warning(nameOfModule .. ": CSK_PersistentData module not available.") end @@ -891,72 +945,108 @@ local function loadParameters() if multiHTTPClient_Instances[selectedInstance].persistentModuleAvailable then local data = CSK_PersistentData.getParameter(multiHTTPClient_Instances[selectedInstance].parametersName) if data then - _G.logger:fine(nameOfModule .. ": Loaded parameters for multiHTTPClientObject " .. tostring(selectedInstance) .. " from CSK_PersistentData module.") + _G.logger:info(nameOfModule .. ": Loaded parameters for multiHTTPClientObject " .. tostring(selectedInstance) .. " from CSK_PersistentData module.") multiHTTPClient_Instances[selectedInstance].parameters = helperFuncs.convertContainer2Table(data) -- If something needs to be configured/activated with new loaded data Script.notifyEvent('MultiHTTPClient_OnNewProcessingParameter', selectedInstance, 'fullSetup', data) --announceExternalEventsAndFunctions() -- future usage CSK_MultiHTTPClient.pageCalled() + tmrMultiHTTPClient:start() + return true else _G.logger:warning(nameOfModule .. ": Loading parameters from CSK_PersistentData module did not work.") + tmrMultiHTTPClient:start() + return false end else _G.logger:warning(nameOfModule .. ": CSK_PersistentData module not available.") + tmrMultiHTTPClient:start() + return false end - tmrMultiHTTPClient:start() end Script.serveFunction("CSK_MultiHTTPClient.loadParameters", loadParameters) local function setLoadOnReboot(status) multiHTTPClient_Instances[selectedInstance].parameterLoadOnReboot = status _G.logger:fine(nameOfModule .. ": Set new status to load setting on reboot: " .. tostring(status)) + Script.notifyEvent("MultiHTTPClient_OnNewStatusLoadParameterOnReboot", status) end Script.serveFunction("CSK_MultiHTTPClient.setLoadOnReboot", setLoadOnReboot) +local function setFlowConfigPriority(status) + multiHTTPClient_Instances[selectedInstance].parameters.flowConfigPriority = status + _G.logger:fine(nameOfModule .. ": Set new status of FlowConfig priority: " .. tostring(status)) + Script.notifyEvent("MultiHTTPClient_OnNewStatusFlowConfigPriority", multiHTTPClient_Instances[selectedInstance].parameters.flowConfigPriority) +end +Script.serveFunction('CSK_MultiHTTPClient.setFlowConfigPriority', setFlowConfigPriority) + --- Function to react on initial load of persistent parameters local function handleOnInitialDataLoaded() - _G.logger:fine(nameOfModule .. ': Try to initially load parameter from CSK_PersistentData module.') - if string.sub(CSK_PersistentData.getVersion(), 1, 1) == '1' then + if _G.availableAPIs.default and _G.availableAPIs.specific then - _G.logger:warning(nameOfModule .. ': CSK_PersistentData module is too old and will not work. Please update CSK_PersistentData module.') + _G.logger:fine(nameOfModule .. ': Try to initially load parameter from CSK_PersistentData module.') + if string.sub(CSK_PersistentData.getVersion(), 1, 1) == '1' then - for j = 1, #multiHTTPClient_Instances do - multiHTTPClient_Instances[j].persistentModuleAvailable = false - end - else - -- Check if CSK_PersistentData version is >= 3.0.0 - if tonumber(string.sub(CSK_PersistentData.getVersion(), 1, 1)) >= 3 then - local parameterName, loadOnReboot, totalInstances = CSK_PersistentData.getModuleParameterName(nameOfModule, '1') - -- Check for amount if instances to create - if totalInstances then - local c = 2 - while c <= totalInstances do - addInstance() - c = c+1 + _G.logger:warning(nameOfModule .. ': CSK_PersistentData module is too old and will not work. Please update CSK_PersistentData module.') + + for j = 1, #multiHTTPClient_Instances do + multiHTTPClient_Instances[j].persistentModuleAvailable = false + end + else + -- Check if CSK_PersistentData version is >= 3.0.0 + if tonumber(string.sub(CSK_PersistentData.getVersion(), 1, 1)) >= 3 then + local parameterName, loadOnReboot, totalInstances = CSK_PersistentData.getModuleParameterName(nameOfModule, '1') + -- Check for amount if instances to create + if totalInstances then + local c = 2 + while c <= totalInstances do + addInstance() + c = c+1 + end end end - end - - for i = 1, #multiHTTPClient_Instances do - local parameterName, loadOnReboot = CSK_PersistentData.getModuleParameterName(nameOfModule, tostring(i)) - if parameterName then - multiHTTPClient_Instances[i].parametersName = parameterName - multiHTTPClient_Instances[i].parameterLoadOnReboot = loadOnReboot + if not multiHTTPClient_Instances then + return end - if multiHTTPClient_Instances[i].parameterLoadOnReboot then - setSelectedInstance(i) - loadParameters() + for i = 1, #multiHTTPClient_Instances do + local parameterName, loadOnReboot = CSK_PersistentData.getModuleParameterName(nameOfModule, tostring(i)) + + if parameterName then + multiHTTPClient_Instances[i].parametersName = parameterName + multiHTTPClient_Instances[i].parameterLoadOnReboot = loadOnReboot + end + + if multiHTTPClient_Instances[i].parameterLoadOnReboot then + setSelectedInstance(i) + loadParameters() + end end + Script.notifyEvent('MultiHTTPClient_OnDataLoadedOnReboot') end - Script.notifyEvent('MultiHTTPClient_OnDataLoadedOnReboot') end end Script.register("CSK_PersistentData.OnInitialDataLoaded", handleOnInitialDataLoaded) +local function resetModule() + if _G.availableAPIs.default and _G.availableAPIs.specific then + clearFlowConfigRelevantConfiguration() + for i = 1, #multiHTTPClient_Instances do + setClientActivated(false) + end + pageCalled() + end +end +Script.serveFunction('CSK_MultiHTTPClient.resetModule', resetModule) +Script.register("CSK_PersistentData.OnResetAllModules", resetModule) + +-- ************************************************* +-- END of functions for CSK_PersistentData module usage +-- ************************************************* + return funcs --************************************************************************** diff --git a/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/MultiHTTPClient_Model.lua b/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/MultiHTTPClient_Model.lua index a505840..ff248e8 100644 --- a/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/MultiHTTPClient_Model.lua +++ b/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/MultiHTTPClient_Model.lua @@ -13,12 +13,22 @@ local nameOfModule = 'CSK_MultiHTTPClient' local multiHTTPClient = {} multiHTTPClient.__index = multiHTTPClient +multiHTTPClient.styleForUI = 'None' -- Optional parameter to set UI style +multiHTTPClient.version = Engine.getCurrentAppVersion() -- Version of module + --************************************************************************** --********************** End Global Scope ********************************** --************************************************************************** --**********************Start Function Scope ******************************* --************************************************************************** +--- Function to react on UI style change +local function handleOnStyleChanged(theme) + multiHTTPClient.styleForUI = theme + Script.notifyEvent("MultiHTTPClient_OnNewStatusCSKStyle", multiHTTPClient.styleForUI) +end +Script.register('CSK_PersistentData.OnNewStatusCSKStyle', handleOnStyleChanged) + --- Function to create new instance ---@param multiHTTPClientInstanceNo int Number of instance ---@return table[] self Instance of multiHTTPClient @@ -49,7 +59,7 @@ function multiHTTPClient.create(multiHTTPClientInstanceNo) self.requestMode = 'POST' -- Request mode like 'PUT', 'POST', 'GET', ... self.requestEndpoint = 'http://192.168.0.10/api/crown/DateTime/getDateTime' -- Endpoint of request self.requestPort = 80 -- Port for request - self.requestName = '' -- Name of request to use + self.requestName = 'NameOfRequest' -- Name of request to use self.requestContent = '' -- Content payload of request self.requestContentType = 'application/json' -- Type of payload content self.requestPeriodic = false -- Status if request should be triggered periodically @@ -67,6 +77,7 @@ function multiHTTPClient.create(multiHTTPClientInstanceNo) -- Parameters to be saved permanently if wanted self.parameters = {} + self.parameters.flowConfigPriority = CSK_FlowConfig ~= nil or false -- Status if FlowConfig should have priority for FlowConfig relevant configurations self.parameters.processingFile = 'CSK_MultiHTTPClient_Processing' -- which file to use for processing (will be started in own thread) self.parameters.clientActivated = false -- Set if HTTP client should be active self.parameters.proxyEnabled = false -- Status if proxy is enabled diff --git a/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/helper/checkAPIs.lua b/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/helper/checkAPIs.lua index aae571b..58deb19 100644 --- a/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/helper/checkAPIs.lua +++ b/CSK_Module_MultiHTTPClient/scripts/Communication/MultiHTTPClient/helper/checkAPIs.lua @@ -5,18 +5,18 @@ local availableAPIs = {} +-- Function to load all default APIs local function loadAPIs() CSK_MultiHTTPClient = require 'API.CSK_MultiHTTPClient' - Cipher = {} - Cipher.AES = require 'API.Cipher.AES' + Log = require 'API.Log' + Log.Handler = require 'API.Log.Handler' + Log.SharedLogger = require 'API.Log.SharedLogger' + Container = require 'API.Container' DateTime = require 'API.DateTime' Engine = require 'API.Engine' File = require 'API.File' - Log = require 'API.Log' - Log.Handler = require 'API.Log.Handler' - Log.SharedLogger = require 'API.Log.SharedLogger' Object = require 'API.Object' Timer = require 'API.Timer' @@ -27,10 +27,13 @@ local function loadAPIs() CSK_PersistentData = require 'API.CSK_PersistentData' elseif appList[i] == 'CSK_Module_UserManagement' then CSK_UserManagement = require 'API.CSK_UserManagement' + elseif appList[i] == 'CSK_Module_FlowConfig' then + CSK_FlowConfig = require 'API.CSK_FlowConfig' end end end +-- Function to load specific APIs local function loadSpecificAPIs() -- If you want to check for specific APIs/functions supported on the device the module is running, place relevant APIs here @@ -40,6 +43,9 @@ local function loadSpecificAPIs() Ethernet = require 'API.Ethernet' Ethernet.Interface = require 'API.Ethernet.Interface' + + Cipher = {} + Cipher.AES = require 'API.Cipher.AES' end availableAPIs.default = xpcall(loadAPIs, debug.traceback) -- TRUE if all default APIs were loaded correctly diff --git a/README.md b/README.md index 0ed0fcc..867a8c7 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,13 @@ If you want to make use of a domain name for an endpoint, please make sure that ## Information -Tested on: +Tested on + |Device|Firmware|Module version |--|--|--| -|SIM 1012|V2.3.0|V1.0.0| +|SICK AppEngine|V1.7.0|V2.0.0| +|SIM1012|V2.4.2|V2.0.0| +|SIM1012|V2.3.0|V1.0.0| This module is part of the SICK AppSpace Coding Starter Kit developing approach. It is programmed in an object-oriented way. Some of the modules use kind of "classes" in Lua to make it possible to reuse code / classes in other projects. diff --git a/docu/CSK_Module_MultiHTTPClient.html b/docu/CSK_Module_MultiHTTPClient.html index 7c47751..c055c3c 100644 --- a/docu/CSK_Module_MultiHTTPClient.html +++ b/docu/CSK_Module_MultiHTTPClient.html @@ -6,7 +6,7 @@ -Documentation - CSK_Module_MultiHTTPClient 1.0.0 +Documentation - CSK_Module_MultiHTTPClient 2.0.0