changed pointer stuff
This commit is contained in:
@@ -19,6 +19,8 @@ public:
|
||||
virtual ~IInputDriver(){};
|
||||
virtual void register_event_handler(IEventHandler* handler) = 0;
|
||||
virtual void unregister_event_handler(IEventHandler* handler) = 0;
|
||||
|
||||
virtual std::shared_ptr<Event> get_event(std::string name) = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
namespace Input
|
||||
{
|
||||
|
||||
Detector::Detector(std::unique_ptr<IInputGPIOInterface> input_gpio_interface, std::map<char, Event> events, std::shared_ptr<IEventNotifier> event_notifier) :
|
||||
Detector::Detector(std::unique_ptr<IInputGPIOInterface> input_gpio_interface, std::map<char, std::shared_ptr<Event>> events, std::shared_ptr<IEventNotifier> event_notifier) :
|
||||
input_gpio_interface(std::move(input_gpio_interface)), events(events), is_running(true), event_notifier(event_notifier)
|
||||
{
|
||||
this->detect_thread = std::thread(&Detector::detect, this);
|
||||
@@ -40,7 +40,7 @@ void Detector::detect()
|
||||
{
|
||||
try
|
||||
{
|
||||
Event& event = events.at(address);
|
||||
auto event = events.at(address);
|
||||
event_notifier->distribute_event(event);
|
||||
}
|
||||
catch(std::out_of_range& e)
|
||||
@@ -64,6 +64,4 @@ bool Detector::check_inputs(char& address)
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ class Detector : public IDetector
|
||||
{
|
||||
|
||||
public:
|
||||
Detector(std::unique_ptr<IInputGPIOInterface> input_gpio_interface, std::map<char, Event> events, std::shared_ptr<IEventNotifier> event_notifier);
|
||||
Detector(std::unique_ptr<IInputGPIOInterface> input_gpio_interface, std::map<char, std::shared_ptr<Event>> events, std::shared_ptr<IEventNotifier> event_notifier);
|
||||
~Detector();
|
||||
|
||||
private:
|
||||
@@ -41,7 +41,7 @@ private:
|
||||
private:
|
||||
std::unique_ptr<IInputGPIOInterface> input_gpio_interface;
|
||||
|
||||
std::map<char, Event> events;
|
||||
std::map<char, std::shared_ptr<Event>> events;
|
||||
|
||||
std::shared_ptr<IEventNotifier> event_notifier;
|
||||
|
||||
|
||||
@@ -47,9 +47,9 @@ void EventNotifier::unregister_event_handler(IEventHandler* handler)
|
||||
this->event_handlers.erase(handler);
|
||||
}
|
||||
|
||||
void EventNotifier::distribute_event(Event& event)
|
||||
void EventNotifier::distribute_event(std::shared_ptr<Event> event)
|
||||
{
|
||||
this->event_queue->push(event);
|
||||
this->event_queue->push(*event);
|
||||
}
|
||||
|
||||
void EventNotifier::notify()
|
||||
|
||||
@@ -34,7 +34,7 @@ public:
|
||||
void register_event_handler(IEventHandler* handler);
|
||||
void unregister_event_handler(IEventHandler* handler);
|
||||
|
||||
void distribute_event(Event& event);
|
||||
void distribute_event(std::shared_ptr<Event> event);
|
||||
|
||||
private:
|
||||
void notify();
|
||||
|
||||
@@ -22,7 +22,7 @@ public:
|
||||
virtual void register_event_handler(IEventHandler* handler) = 0;
|
||||
virtual void unregister_event_handler(IEventHandler* handler) = 0;
|
||||
|
||||
virtual void distribute_event(Event& event) = 0;
|
||||
virtual void distribute_event(std::shared_ptr<Event> event) = 0;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -9,22 +9,37 @@
|
||||
namespace Input
|
||||
{
|
||||
|
||||
InputDriver::InputDriver(std::shared_ptr<IEventNotifier> event_notifier, std::unique_ptr<IDetector> detector) :
|
||||
event_notifier(event_notifier), detector(std::move(detector))
|
||||
InputDriver::InputDriver(std::shared_ptr<IEventNotifier> event_notifier, std::unique_ptr<IDetector> detector, std::map<std::string, std::shared_ptr<Event>> events) :
|
||||
event_notifier(event_notifier),
|
||||
detector(std::move(detector)),
|
||||
events(events)
|
||||
{
|
||||
CLOG(INFO, INPUT_LOGGER) << "Created InputDriver";
|
||||
}
|
||||
|
||||
void InputDriver::register_event_handler(IEventHandler* handler)
|
||||
{
|
||||
event_notifier->register_event_handler(handler);
|
||||
this->event_notifier->register_event_handler(handler);
|
||||
}
|
||||
|
||||
void InputDriver::unregister_event_handler(IEventHandler* handler)
|
||||
{
|
||||
event_notifier->unregister_event_handler(handler);
|
||||
this->event_notifier->unregister_event_handler(handler);
|
||||
}
|
||||
|
||||
std::shared_ptr<Event> InputDriver::get_event(std::string name)
|
||||
{
|
||||
std::shared_ptr<Event> event;
|
||||
try
|
||||
{
|
||||
event = this->events.at(name);
|
||||
}
|
||||
catch(std::out_of_range& e)
|
||||
{
|
||||
CLOG_N_TIMES(1, WARNING, OUTPUT_LOGGER) << "Did not found event " << name << " please check config file!";
|
||||
}
|
||||
|
||||
return event;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -20,13 +20,17 @@ class InputDriver : public IInputDriver
|
||||
|
||||
public:
|
||||
|
||||
InputDriver(std::shared_ptr<IEventNotifier> event_notifier, std::unique_ptr<IDetector> detector);
|
||||
InputDriver(std::shared_ptr<IEventNotifier> event_notifier, std::unique_ptr<IDetector> detector, std::map<std::string, std::shared_ptr<Event>> events);
|
||||
virtual void register_event_handler(IEventHandler* handler) override;
|
||||
virtual void unregister_event_handler(IEventHandler* handler) override;
|
||||
|
||||
virtual std::shared_ptr<Event> get_event(std::string name);
|
||||
|
||||
private:
|
||||
std::shared_ptr<IEventNotifier> event_notifier;
|
||||
std::unique_ptr<IDetector> detector;
|
||||
|
||||
std::map<std::string, std::shared_ptr<Event>> events;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -21,27 +21,24 @@ std::shared_ptr<InputDriver> InputDriverFactory::get_InputDriver(std::istream& i
|
||||
LoggerFactory::CreateInputLogger();
|
||||
|
||||
IBlockingQueue<Event>* event_queue = new BlockingQueue<Event>;
|
||||
std::shared_ptr<IEventNotifier> event_notifier = std::make_shared<EventNotifier>(event_queue);
|
||||
std::unique_ptr<IInputGPIOInterface> input_gpio_interface = std::make_unique<InputGPIOInterface>(input_config_stream);
|
||||
std::unique_ptr<IDetector> detector(std::move(get_detector(matrix_config_stream, std::move(input_gpio_interface), event_notifier)));
|
||||
|
||||
return std::shared_ptr<InputDriver>(new InputDriver(event_notifier, std::move(detector)));
|
||||
}
|
||||
|
||||
std::unique_ptr<IDetector> InputDriverFactory::get_detector(std::istream& matrix_config_stream, std::unique_ptr<IInputGPIOInterface> input_gpio_interface, std::shared_ptr<IEventNotifier> event_notifier)
|
||||
{
|
||||
json matrix_config;
|
||||
matrix_config_stream >> matrix_config;
|
||||
|
||||
std::map<char, Event> input_events = create_input_events(matrix_config);
|
||||
std::map<char, std::shared_ptr<Event>> address_event_map;
|
||||
std::map<std::string, std::shared_ptr<Event>> name_event_map;
|
||||
create_input_events(matrix_config, address_event_map, name_event_map);
|
||||
|
||||
return std::unique_ptr<Detector>(new Detector(std::move(input_gpio_interface), input_events, event_notifier));
|
||||
std::shared_ptr<IEventNotifier> event_notifier = std::make_shared<EventNotifier>(event_queue);
|
||||
std::unique_ptr<IInputGPIOInterface> input_gpio_interface = std::make_unique<InputGPIOInterface>(input_config_stream);
|
||||
std::unique_ptr<IDetector> detector(new Detector(std::move(input_gpio_interface), address_event_map, event_notifier));
|
||||
|
||||
return std::shared_ptr<InputDriver>(new InputDriver(event_notifier, std::move(detector), name_event_map));
|
||||
}
|
||||
|
||||
std::map<char, Event> InputDriverFactory::create_input_events(json matrix_config)
|
||||
{
|
||||
std::map<char, Event> events;
|
||||
|
||||
void InputDriverFactory::create_input_events(json matrix_config, std::map<char, std::shared_ptr<Event>> address_event_map, std::map<std::string, std::shared_ptr<Event>> name_event_map)
|
||||
{
|
||||
for(auto& json_event : matrix_config)
|
||||
{
|
||||
|
||||
@@ -52,8 +49,10 @@ std::map<char, Event> InputDriverFactory::create_input_events(json matrix_config
|
||||
int priority = json_event.at("priority").get<json::number_integer_t>();
|
||||
|
||||
Event event(address, priority, name);
|
||||
std::shared_ptr event_ptr = std::make_shared<Event>(event);
|
||||
|
||||
events.emplace(address, event);
|
||||
address_event_map.emplace(address, event_ptr);
|
||||
name_event_map.emplace(name, event_ptr);
|
||||
}
|
||||
catch(json::exception& e)
|
||||
{
|
||||
@@ -61,8 +60,6 @@ std::map<char, Event> InputDriverFactory::create_input_events(json matrix_config
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
return events;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -31,9 +31,9 @@ class InputDriverFactory
|
||||
|
||||
public:
|
||||
static std::shared_ptr<InputDriver> get_InputDriver(std::istream& input_config_stream, std::istream& matrix_config_stream);
|
||||
|
||||
private:
|
||||
static std::unique_ptr<IDetector> get_detector(std::istream& matrix_config_stream, std::unique_ptr<IInputGPIOInterface> input_gpio_interface, std::shared_ptr<IEventNotifier> event_notifier);
|
||||
static std::map<char, Event> create_input_events(nlohmann::json matrix_config);
|
||||
static void create_input_events(nlohmann::json matrix_config, std::map<char, std::shared_ptr<Event>> address_event_map, std::map<std::string, std::shared_ptr<Event>> name_event_map);
|
||||
static void ConfigureLogger();
|
||||
};
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace LoggerFactory
|
||||
conf.setToDefault();
|
||||
|
||||
conf.set(el::Level::Global, el::ConfigurationType::ToFile, "true");
|
||||
conf.set(el::Level::Global, el::ConfigurationType::Filename, INPUT_LOGGER_FILE);
|
||||
conf.set(el::Level::Global, el::ConfigurationType::Filename, LOGGER_FILE);
|
||||
conf.set(el::Level::Global, el::ConfigurationType::Format, "%datetime [%level] [%func] : %msg");
|
||||
|
||||
el::Loggers::reconfigureLogger(INPUT_LOGGER, conf);
|
||||
|
||||
@@ -8,7 +8,11 @@
|
||||
#include "easylogging++.h"
|
||||
|
||||
#define INPUT_LOGGER "driver_logger"
|
||||
#define INPUT_LOGGER_FILE "input_driver.log"
|
||||
#define OUTPUT_LOGGER "output_logger"
|
||||
|
||||
#define LOGGER_FILE "input_driver.log"
|
||||
|
||||
|
||||
|
||||
#define DRIVER_CONF_FILE "/var/log/flippr_driver.conf"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user