diff --git a/FlippR-Driver/src/input/InputDriverFactory.cpp b/FlippR-Driver/src/input/InputDriverFactory.cpp index 3d7a35a..491a754 100644 --- a/FlippR-Driver/src/input/InputDriverFactory.cpp +++ b/FlippR-Driver/src/input/InputDriverFactory.cpp @@ -22,64 +22,77 @@ namespace flippR_driver { namespace input { -std::shared_ptr InputDriverFactory::get_InputDriver(std::istream &input_config_stream, std::istream &matrix_config_stream) +namespace InputDriverFactory +{ + +std::shared_ptr +get_InputDriver(std::istream &input_config_stream, std::istream &matrix_config_stream) { LoggerFactory::CreateInputLogger(); IBlockingQueue *event_queue = new BlockingQueue; - - json matrix_config; - matrix_config_stream >> matrix_config; - std::shared_ptr event_notifier(new EventNotifier(event_queue)); std::vector> events; std::map> name_event_map; + json matrix_config; + matrix_config_stream >> matrix_config; create_input_events(matrix_config, events, name_event_map, event_notifier); std::unique_ptr input_gpio_interface(new InputGPIOInterface(input_config_stream)); - std::unique_ptr detector( - new Detector(std::move(input_gpio_interface), events)); + std::unique_ptr detector(new Detector(std::move(input_gpio_interface), events)); return std::shared_ptr(new InputDriver(event_notifier, std::move(detector), name_event_map)); } - - -void InputDriverFactory::create_input_events(json matrix_config, std::vector>& events, - std::map>& name_event_map, - std::shared_ptr event_notifier) +namespace { - int global_bounce_time = matrix_config.at("global_bounce_time").get(); - auto& event_array = matrix_config.at("input_matrix"); - for (auto &json_event : event_array) + void create_input_events(json matrix_config, std::vector> &events, + std::map> &name_event_map, + std::shared_ptr event_notifier) + { + int global_bounce_time = matrix_config.at("global_bounce_time").get(); + auto &json_events = matrix_config.at("input_matrix"); + for(auto &json_event : json_events) + { + std::shared_ptr event = create_event(json_event, event_notifier, global_bounce_time); + + events.push_back(event); + name_event_map.emplace(event->name, event); + } + } + + static std::shared_ptr create_event(json &json_event, std::shared_ptr event_notifier, int bounce_time) { try { std::string name = json_event.at("name"); char address = json_event.at("address").get(); int priority = json_event.at("priority").get(); - int bounce_time = global_bounce_time; - auto it_bounce_time = json_event.find("bounce_time"); - if (it_bounce_time != json_event.end()) - { - bounce_time = it_bounce_time->get(); - } + set_individual_bounce_time(json_event, bounce_time); - std::shared_ptr event_ptr(new DistributingEvent(address, priority, name, - std::chrono::milliseconds(bounce_time), event_notifier)); - - events.push_back(event_ptr); - name_event_map.emplace(name, event_ptr); + return std::make_shared(address, priority, name, std::chrono::milliseconds(bounce_time), event_notifier); } - catch (json::exception &e) + catch(json::exception &e) { CLOG(ERROR, INPUT_LOGGER) << "Matrix config-file corrupted: " << e.what(); exit(EXIT_FAILURE); } } -} + + static void set_individual_bounce_time(json &json_event, int &bounce_time) + { + auto it_bounce_time = json_event.find("bounce_time"); + + if(it_bounce_time != json_event.end()) + { + bounce_time = it_bounce_time->get(); + } + } } } +} +} +} diff --git a/FlippR-Driver/src/input/InputDriverFactory.h b/FlippR-Driver/src/input/InputDriverFactory.h index 3f038da..c1a7356 100644 --- a/FlippR-Driver/src/input/InputDriverFactory.h +++ b/FlippR-Driver/src/input/InputDriverFactory.h @@ -11,6 +11,8 @@ #include #include +#include + #include "Detector.h" #include "input/IInputDriver.h" @@ -22,17 +24,20 @@ namespace flippR_driver { namespace input { -class InputDriverFactory +namespace InputDriverFactory { - -public: static std::shared_ptr get_InputDriver(std::istream& input_config_stream, std::istream& matrix_config_stream); -private: + namespace + { static void create_input_events(nlohmann::json matrix_config, - std::vector>& events, - std::map>& name_event_map, - std::shared_ptr event_notifier); + std::vector> &events, + std::map> &name_event_map, + std::shared_ptr event_notifier); + + static std::shared_ptr create_event(nlohmann::json &json_event, std::shared_ptr event_notifier, int bounce_time); + static void set_individual_bounce_time(nlohmann::json &json_event, int &bounce_time); + } }; } }