From 14ed9d010acfd4638f5c471e4a9e587b454e840e Mon Sep 17 00:00:00 2001 From: Lucio Maranta Date: Tue, 20 Mar 2018 09:04:48 +0100 Subject: [PATCH] Added NC softkeys: - API config - SignalR thread - SignalR click handler --- Libs/CMS_CORE_Library.dll | Bin 8901120 -> 8902144 bytes Step.Config/Config/areasConfig.xml | 122 +++++------------ Step.Config/Config/areasConfigValidator.xsd | 126 ++++++++---------- Step.Config/Config/ncSoftKeyConfig.xml | 116 ++++++++++++++++ .../Config/ncSoftKeyConfigValidator.xsd | 48 +++++++ ...oftKeyConfig.xml => userSoftKeyConfig.xml} | 0 ...tor.xsd => userSoftKeyConfigValidator.xsd} | 0 Step.Config/ServerConfig.cs | 3 +- Step.Config/ServerConfigController.cs | 44 ++++-- Step.Config/Step.Config.csproj | 12 +- Step.Model/ConfigModels/NcSoftKeysModel.cs | 10 ++ ...nfigModel.cs => UserSoftKeyConfigModel.cs} | 2 +- Step.Model/Constants.cs | 10 +- Step.Model/DTOModels/DTONcSoftKeyModel.cs | 34 +++++ ...SoftKeyModel.cs => DTOUserSoftKeyModel.cs} | 6 +- Step.Model/Step.Model.csproj | 6 +- Step.NC/NcHandler.cs | 56 ++++++-- Step.Tasks/ThreadsFunctions.cs | 97 +++++++++++--- Step.Tasks/ThreadsHandler.cs | 3 +- Step.Utils/supportFunctions.cs | 36 +++++ Step/Controllers/SignalR/NcHub.cs | 20 ++- .../WebApi/ConfigurationController.cs | 14 +- Step/Listeners/ListenersHandler.cs | 8 +- Step/Listeners/SignalR/SignalRListener.cs | 37 +++-- 24 files changed, 580 insertions(+), 230 deletions(-) create mode 100644 Step.Config/Config/ncSoftKeyConfig.xml create mode 100644 Step.Config/Config/ncSoftKeyConfigValidator.xsd rename Step.Config/Config/{softKeyConfig.xml => userSoftKeyConfig.xml} (100%) rename Step.Config/Config/{softKeyConfigValidator.xsd => userSoftKeyConfigValidator.xsd} (100%) create mode 100644 Step.Model/ConfigModels/NcSoftKeysModel.cs rename Step.Model/ConfigModels/{SoftKeyConfigModel.cs => UserSoftKeyConfigModel.cs} (94%) create mode 100644 Step.Model/DTOModels/DTONcSoftKeyModel.cs rename Step.Model/DTOModels/{DTOSoftKeyModel.cs => DTOUserSoftKeyModel.cs} (88%) diff --git a/Libs/CMS_CORE_Library.dll b/Libs/CMS_CORE_Library.dll index 3a0456d3ec9a112b0caf09a2c483f5e98adad243..3ee70c995ee664232ac2e344329e92f18b37b16b 100644 GIT binary patch delta 382872 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