refactoring to interfaces complete
This commit is contained in:
@@ -15,7 +15,7 @@
|
|||||||
namespace Input
|
namespace Input
|
||||||
{
|
{
|
||||||
|
|
||||||
Detector::Detector(InputGPIOInterface* input_gpio_interface, std::map<char, Event> events, EventNotifier* event_notifier) :
|
Detector::Detector(InputGPIOInterface* input_gpio_interface, std::map<char, Event> events, IEventNotifier* event_notifier) :
|
||||||
input_gpio_interface(input_gpio_interface), events(events), is_running(true), event_notifier(event_notifier)
|
input_gpio_interface(input_gpio_interface), events(events), is_running(true), event_notifier(event_notifier)
|
||||||
{
|
{
|
||||||
detect_thread = std::thread(&Detector::detect, this);
|
detect_thread = std::thread(&Detector::detect, this);
|
||||||
|
|||||||
@@ -19,11 +19,11 @@
|
|||||||
namespace Input
|
namespace Input
|
||||||
{
|
{
|
||||||
|
|
||||||
class Detector : IDetector
|
class Detector : public IDetector
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Detector(InputGPIOInterface* input_gpio_interface, std::map<char, Event> events, EventNotifier* event_notifier);
|
Detector(InputGPIOInterface* input_gpio_interface, std::map<char, Event> events, IEventNotifier* event_notifier);
|
||||||
~Detector();
|
~Detector();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -35,7 +35,7 @@ private:
|
|||||||
|
|
||||||
std::map<char, Event> events;
|
std::map<char, Event> events;
|
||||||
|
|
||||||
EventNotifier* event_notifier;
|
IEventNotifier* event_notifier;
|
||||||
|
|
||||||
bool is_running;
|
bool is_running;
|
||||||
std::thread detect_thread;
|
std::thread detect_thread;
|
||||||
|
|||||||
@@ -11,26 +11,21 @@
|
|||||||
|
|
||||||
#ifndef INPUTEVENTHANDLER_H_
|
#ifndef INPUTEVENTHANDLER_H_
|
||||||
#define INPUTEVENTHANDLER_H_
|
#define INPUTEVENTHANDLER_H_
|
||||||
|
#include "IEventHandler.h"
|
||||||
#include "../utilities/config.h"
|
|
||||||
|
|
||||||
#include "Event.hpp"
|
#include "Event.hpp"
|
||||||
|
#include "IInputDriver.h"
|
||||||
|
|
||||||
|
#include "../utilities/config.h"
|
||||||
|
|
||||||
namespace Input
|
namespace Input
|
||||||
{
|
{
|
||||||
class EventHandler;
|
class EventHandler;
|
||||||
|
|
||||||
class InputDriver
|
class EventHandler : public IEventHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void register_event_handler(EventHandler* handler);
|
EventHandler(std::shared_ptr<IInputDriver> input_driver) :
|
||||||
void unregister_event_handler(EventHandler* handler);
|
|
||||||
};
|
|
||||||
|
|
||||||
class EventHandler
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
EventHandler(std::shared_ptr<InputDriver> input_driver) :
|
|
||||||
input_driver(input_driver)
|
input_driver(input_driver)
|
||||||
{
|
{
|
||||||
this->input_driver->register_event_handler(this);
|
this->input_driver->register_event_handler(this);
|
||||||
@@ -51,7 +46,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<InputDriver> input_driver;
|
std::shared_ptr<IInputDriver> input_driver;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ void EventNotifier::unregister_event_handler(IEventHandler* handler)
|
|||||||
event_handler.erase(handler);
|
event_handler.erase(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventNotifier::distribute_event(IEvent& event)
|
void EventNotifier::distribute_event(Event& event)
|
||||||
{
|
{
|
||||||
event_queue.push(event);
|
event_queue.push(event);
|
||||||
}
|
}
|
||||||
@@ -56,7 +56,7 @@ void EventNotifier::notify()
|
|||||||
std::lock_guard<std::mutex> event_handler_guard(event_handler_mutex);
|
std::lock_guard<std::mutex> event_handler_guard(event_handler_mutex);
|
||||||
for(auto handler : event_handler)
|
for(auto handler : event_handler)
|
||||||
{
|
{
|
||||||
boost::thread handler_caller(boost::bind(&EventHandler::handle, handler, event));
|
boost::thread handler_caller(boost::bind(&IEventHandler::handle, handler, event));
|
||||||
|
|
||||||
if(!handler_caller.timed_join(boost::posix_time::milliseconds(HANDLER_TIMEOUT)))
|
if(!handler_caller.timed_join(boost::posix_time::milliseconds(HANDLER_TIMEOUT)))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
namespace Input
|
namespace Input
|
||||||
{
|
{
|
||||||
|
|
||||||
class EventNotifier : IEventNotifier
|
class EventNotifier : public IEventNotifier
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -33,13 +33,13 @@ public:
|
|||||||
void register_event_handler(IEventHandler* handler);
|
void register_event_handler(IEventHandler* handler);
|
||||||
void unregister_event_handler(IEventHandler* handler);
|
void unregister_event_handler(IEventHandler* handler);
|
||||||
|
|
||||||
void distribute_event(IEvent& event);
|
void distribute_event(Event& event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void notify();
|
void notify();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BlockingQueue<IEvent> event_queue;
|
BlockingQueue<Event> event_queue;
|
||||||
std::set<IEventHandler*> event_handler;
|
std::set<IEventHandler*> event_handler;
|
||||||
|
|
||||||
bool is_running;
|
bool is_running;
|
||||||
|
|||||||
@@ -8,11 +8,16 @@
|
|||||||
#ifndef SRC_INPUT_IEVENTHANDLER_H_
|
#ifndef SRC_INPUT_IEVENTHANDLER_H_
|
||||||
#define SRC_INPUT_IEVENTHANDLER_H_
|
#define SRC_INPUT_IEVENTHANDLER_H_
|
||||||
|
|
||||||
|
#include "Event.hpp"
|
||||||
|
|
||||||
namespace Input {
|
namespace Input {
|
||||||
|
|
||||||
class IEventHandler
|
class IEventHandler
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
virtual ~IEventHandler() = 0;
|
||||||
|
|
||||||
|
virtual void handle(Event& event) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,12 +8,17 @@
|
|||||||
#ifndef SRC_INPUT_IINPUTDRIVER_H_
|
#ifndef SRC_INPUT_IINPUTDRIVER_H_
|
||||||
#define SRC_INPUT_IINPUTDRIVER_H_
|
#define SRC_INPUT_IINPUTDRIVER_H_
|
||||||
|
|
||||||
|
#include "IEventHandler.h"
|
||||||
|
#include "IEventNotifier.h"
|
||||||
|
|
||||||
namespace Input {
|
namespace Input {
|
||||||
|
|
||||||
class IInputDriver
|
class IInputDriver
|
||||||
{
|
{
|
||||||
|
public:
|
||||||
|
virtual ~IInputDriver() = 0;
|
||||||
|
virtual void register_event_handler(IEventHandler* handler) = 0;
|
||||||
|
virtual void unregister_event_handler(IEventHandler* handler) = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,21 +6,20 @@
|
|||||||
*/
|
*/
|
||||||
#ifndef SRC_INPUT_INPUTDRIVER_HPP_
|
#ifndef SRC_INPUT_INPUTDRIVER_HPP_
|
||||||
#define SRC_INPUT_INPUTDRIVER_HPP_
|
#define SRC_INPUT_INPUTDRIVER_HPP_
|
||||||
|
#include "IInputDriver.h"
|
||||||
|
|
||||||
#include "../utilities/config.h"
|
#include "../utilities/config.h"
|
||||||
|
|
||||||
#include "EventHandler.hpp"
|
#include "IDetector.h"
|
||||||
#include "EventNotifier.h"
|
|
||||||
#include "Detector.h"
|
|
||||||
|
|
||||||
namespace Input
|
namespace Input
|
||||||
{
|
{
|
||||||
|
|
||||||
class InputDriver
|
class InputDriver : public IInputDriver
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
InputDriver(EventNotifier* event_notifier, Detector* detector) :
|
InputDriver(IEventNotifier* event_notifier, IDetector* detector) :
|
||||||
event_notifier(event_notifier), detector(detector)
|
event_notifier(event_notifier), detector(detector)
|
||||||
{
|
{
|
||||||
CLOG(INFO, INPUT_LOGGER) << "Created InputDriver";
|
CLOG(INFO, INPUT_LOGGER) << "Created InputDriver";
|
||||||
@@ -35,19 +34,19 @@ public:
|
|||||||
detector = NULL;
|
detector = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void register_event_handler(EventHandler* handler)
|
void register_event_handler(IEventHandler* handler)
|
||||||
{
|
{
|
||||||
event_notifier->register_event_handler(handler);
|
event_notifier->register_event_handler(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
void unregister_event_handler(EventHandler* handler)
|
void unregister_event_handler(IEventHandler* handler)
|
||||||
{
|
{
|
||||||
event_notifier->unregister_event_handler(handler);
|
event_notifier->unregister_event_handler(handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EventNotifier* event_notifier;
|
EventNotifier* event_notifier;
|
||||||
Detector* detector;
|
IDetector* detector;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,13 +10,13 @@
|
|||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
#include "Detector.h"
|
#include "IDetector.h"
|
||||||
|
|
||||||
#include "../utilities/InputGPIOInterface.h"
|
#include "../utilities/InputGPIOInterface.h"
|
||||||
#include "../utilities/config.h"
|
#include "../utilities/config.h"
|
||||||
#include "../lib/json/json.hpp"
|
#include "../lib/json/json.hpp"
|
||||||
#include "../lib/easylogging/easylogging++.h"
|
#include "../lib/easylogging/easylogging++.h"
|
||||||
#include "EventNotifier.h"
|
#include "IEventNotifier.h"
|
||||||
|
|
||||||
using namespace nlohmann;
|
using namespace nlohmann;
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ class InputFactory
|
|||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static shared_ptr<InputDriver*> get_InputDriver(std::string& input_config_path, std::string& matrix_config_path)
|
static shared_ptr<IInputDriver*> get_InputDriver(std::string& input_config_path, std::string& matrix_config_path)
|
||||||
{
|
{
|
||||||
this->ConfigureLogger();
|
this->ConfigureLogger();
|
||||||
auto event_notifier = new EventNotifier();
|
auto event_notifier = new EventNotifier();
|
||||||
@@ -40,7 +40,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static Detector* get_detector(std::string& input_config_path, std::string& matrix_config_path)
|
static IDetector* get_detector(std::string& input_config_path, std::string& matrix_config_path)
|
||||||
{
|
{
|
||||||
std::ifstream input_config_stream(input_config_path);
|
std::ifstream input_config_stream(input_config_path);
|
||||||
json input_config;
|
json input_config;
|
||||||
@@ -53,7 +53,7 @@ private:
|
|||||||
auto input_gpio_interface = new InputGPIOInterface(input_config);
|
auto input_gpio_interface = new InputGPIOInterface(input_config);
|
||||||
auto input_notifier = new InputEventNotifier();
|
auto input_notifier = new InputEventNotifier();
|
||||||
|
|
||||||
std::map<char, InputEvent> input_events = this->create_input_events(matrix_config);
|
std::map<char, Event> input_events = this->create_input_events(matrix_config);
|
||||||
|
|
||||||
return new Detector(input_gpio_interface, input_events, input_notifier);
|
return new Detector(input_gpio_interface, input_events, input_notifier);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,11 +23,11 @@ SCENARIO("An InputDriver gets created", "[construction}")
|
|||||||
|
|
||||||
WHEN("The InputDriver gets created")
|
WHEN("The InputDriver gets created")
|
||||||
{
|
{
|
||||||
Input::InputDriver input_driver(&event_notifier);
|
Input::InputDriver input_driver(&event_notifier_mock.get());
|
||||||
|
|
||||||
THEN("It saved the EventNotifier")
|
THEN("It saved the EventNotifier")
|
||||||
{
|
{
|
||||||
REQUIRE(input_driver.event_notifier == &event_notifier);
|
REQUIRE(input_driver.event_notifier == &event_notifier_mock.get());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user