From 4704caa750b4c70ca1a0f252fbef09df93f68249 Mon Sep 17 00:00:00 2001 From: Jonas Zeunert Date: Tue, 6 Aug 2019 21:48:40 +0200 Subject: [PATCH] changed config parsing --- .../contrib/json_example/server_config.json | 1 - FlippR-Driver/networking/FlippRServer.cpp | 28 +++++++++++++------ FlippR-Driver/networking/FlippRServer.h | 11 ++++---- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/FlippR-Driver/contrib/json_example/server_config.json b/FlippR-Driver/contrib/json_example/server_config.json index efe81b5..2eddb85 100644 --- a/FlippR-Driver/contrib/json_example/server_config.json +++ b/FlippR-Driver/contrib/json_example/server_config.json @@ -5,5 +5,4 @@ "solenoid-config" :"../../contrib/json_example/output/Solenoid_Config.json", "sound-config" :"../../contrib/json_example/output/Sound_Config.json", "display-config" :"../../contrib/json_example/output/Display_Config.json", - "lamp-config" :"../../contrib/json_example/output/Lamp_Config.json" } diff --git a/FlippR-Driver/networking/FlippRServer.cpp b/FlippR-Driver/networking/FlippRServer.cpp index 9db0eef..8db53d4 100644 --- a/FlippR-Driver/networking/FlippRServer.cpp +++ b/FlippR-Driver/networking/FlippRServer.cpp @@ -16,6 +16,8 @@ #include #include +#include +#include int main(int argc, char** argv) { @@ -63,17 +65,25 @@ void FlippRServer::parse_server_config_file() } catch(const std::exception e) { - logger().information(FRED("server_config.json not readable!")); + logger().information(e.what()); Application::EXIT_IOERR; } logger().information(FCYN("Parsing server_config.json...")); - for(auto &config_json : json->getNames()) + Object::NameList keys = json->getNames(); + std::sort(keys.begin(), keys.end()); + + if(!std::includes(keys.begin(), keys.end(), REQUIRED_CONFIG_KEYS.begin(), REQUIRED_CONFIG_KEYS.end())) { - handle_config_file(config_json, json->get(config_json)); + std::string config_keys; + config_keys = std::accumulate(REQUIRED_CONFIG_KEYS.begin(), REQUIRED_CONFIG_KEYS.end(), config_keys); + logger().error("Need all of the following keys to be specified in server_config json" + config_keys); + Application::EXIT_USAGE; } + this->configs = *json; + config.close(); } @@ -116,10 +126,10 @@ void FlippRServer::initialize_output_driver() try { - lamp_config_stream.open(this->lamp_config); - solenoid_config_stream.open(this->solenoid_config); - sound_config_stream.open(this->sound_config); - display_config_stream.open(this->display_config); + lamp_config_stream.open(this->configs["lamp_config"].toString()); + solenoid_config_stream.open(this->configs["solenoid_config"].toString()); + sound_config_stream.open(this->configs["sound_config"].toString()); + display_config_stream.open(this->configs["display_config"].toString()); } catch(const std::exception& e) { @@ -140,8 +150,8 @@ void FlippRServer::initialize_input_driver() try { - input_config_stream.open(this->input_config); - matrix_config_stream.open(this->matrix_config); + input_config_stream.open(this->configs["input_config"].toString()); + matrix_config_stream.open(this->configs["matrix_config"].toString()); } catch(const std::exception& e) { diff --git a/FlippR-Driver/networking/FlippRServer.h b/FlippR-Driver/networking/FlippRServer.h index 54bfaa3..a34706f 100644 --- a/FlippR-Driver/networking/FlippRServer.h +++ b/FlippR-Driver/networking/FlippRServer.h @@ -10,6 +10,7 @@ #include #include +#include namespace flippR_driver { @@ -42,17 +43,15 @@ private: private: const std::string DEFAULT_RUNTIME_DIR = "/tmp/flippR_driver-runtime/"; const std::string SOCKET_NAME = "S.flippR_driver"; + const std::vector REQUIRED_CONFIG_KEYS = {"display-config", "input-config", "lamp-config", + "matrix-config", "solenoid-config", "sound-config"}; int input_port; int output_port; bool help_requested; - std::string input_config; - std::string matrix_config; - std::string lamp_config; - std::string solenoid_config; - std::string sound_config; - std::string display_config; + Poco::DynamicStruct configs; + std::string server_config; std::shared_ptr input_driver;