Renamed EventNotifer to EventFdNotifier and employed new NotifierInterface
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
#include "EventNotifier.hpp"
|
||||
#include "EventFdNotifier.hpp"
|
||||
|
||||
#include <sys/eventfd.h>
|
||||
#include <unistd.h>
|
||||
@@ -11,7 +11,7 @@ namespace Bloom
|
||||
{
|
||||
using Exceptions::Exception;
|
||||
|
||||
EventNotifier::EventNotifier() {
|
||||
EventFdNotifier::EventFdNotifier() {
|
||||
this->fileDescriptor = ::eventfd(0, EFD_NONBLOCK);
|
||||
|
||||
if (this->fileDescriptor < 0) {
|
||||
@@ -22,32 +22,32 @@ namespace Bloom
|
||||
}
|
||||
}
|
||||
|
||||
EventNotifier::EventNotifier(EventNotifier&& other) noexcept
|
||||
EventFdNotifier::EventFdNotifier(EventFdNotifier&& other) noexcept
|
||||
: fileDescriptor(other.fileDescriptor)
|
||||
{
|
||||
other.fileDescriptor = std::nullopt;
|
||||
}
|
||||
|
||||
EventNotifier::~EventNotifier() noexcept {
|
||||
EventFdNotifier::~EventFdNotifier() noexcept {
|
||||
this->close();
|
||||
}
|
||||
|
||||
void EventNotifier::notify() {
|
||||
void EventFdNotifier::notify() {
|
||||
if (::eventfd_write(this->fileDescriptor.value(), 1) < 0) {
|
||||
throw Exceptions::Exception("Failed to increment eventfd counter - error number: "
|
||||
+ std::to_string(errno));
|
||||
}
|
||||
}
|
||||
|
||||
void EventNotifier::clear() {
|
||||
void EventFdNotifier::clear() {
|
||||
eventfd_t counter = {};
|
||||
if (::eventfd_read(this->fileDescriptor.value(), &counter) < 0 && errno != EAGAIN) {
|
||||
throw Exceptions::Exception("Failed to clear EventNotifier object - eventfd_read failed - "
|
||||
throw Exceptions::Exception("Failed to clear EventFdNotifier object - eventfd_read failed - "
|
||||
"error number: " + std::to_string(errno));
|
||||
}
|
||||
}
|
||||
|
||||
void EventNotifier::close() {
|
||||
void EventFdNotifier::close() {
|
||||
if (this->fileDescriptor.value_or(-1) >= 0) {
|
||||
::close(this->fileDescriptor.value());
|
||||
}
|
||||
46
src/Helpers/EventFdNotifier.hpp
Normal file
46
src/Helpers/EventFdNotifier.hpp
Normal file
@@ -0,0 +1,46 @@
|
||||
#pragma once
|
||||
|
||||
#include <optional>
|
||||
|
||||
#include "NotifierInterface.hpp"
|
||||
|
||||
namespace Bloom
|
||||
{
|
||||
/**
|
||||
* The EventFdNotifier class is an RAII wrapper for a Linux eventfd object.
|
||||
*
|
||||
* It uses an eventfd object to implement the NotifierInterface.
|
||||
*/
|
||||
class EventFdNotifier: public NotifierInterface
|
||||
{
|
||||
public:
|
||||
EventFdNotifier();
|
||||
|
||||
/*
|
||||
* EventNotifier objects should not be copied.
|
||||
*/
|
||||
EventFdNotifier(EventFdNotifier& other) = delete;
|
||||
EventFdNotifier& operator = (EventFdNotifier& other) = delete;
|
||||
|
||||
/*
|
||||
* TODO: Implement this. For now, use the move constructor.
|
||||
*/
|
||||
EventFdNotifier& operator = (EventFdNotifier&& other) = delete;
|
||||
|
||||
EventFdNotifier(EventFdNotifier&& other) noexcept;
|
||||
~EventFdNotifier() noexcept override;
|
||||
|
||||
[[nodiscard]] int getFileDescriptor() const {
|
||||
return this->fileDescriptor.value();
|
||||
}
|
||||
|
||||
void notify() override;
|
||||
|
||||
void clear();
|
||||
|
||||
private:
|
||||
std::optional<int> fileDescriptor;
|
||||
|
||||
void close();
|
||||
};
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <optional>
|
||||
|
||||
namespace Bloom
|
||||
{
|
||||
/**
|
||||
* The EventNotifier class is an RAII wrapper for a Linux eventfd object.
|
||||
*
|
||||
* The EventListener can hold an instance to EventNotifier, where it will invoke EventNotifier::notify() everytime
|
||||
* a new event is registered on the listener.
|
||||
*/
|
||||
class EventNotifier
|
||||
{
|
||||
public:
|
||||
EventNotifier();
|
||||
|
||||
/*
|
||||
* EpollInstance objects should not be copied.
|
||||
*/
|
||||
EventNotifier(EventNotifier& other) = delete;
|
||||
EventNotifier& operator = (EventNotifier& other) = delete;
|
||||
|
||||
/*
|
||||
* TODO: Implement this. For now, use the move constructor.
|
||||
*/
|
||||
EventNotifier& operator = (EventNotifier&& other) = delete;
|
||||
|
||||
EventNotifier(EventNotifier&& other) noexcept;
|
||||
~EventNotifier() noexcept;
|
||||
|
||||
[[nodiscard]] int getFileDescriptor() const {
|
||||
return this->fileDescriptor.value();
|
||||
}
|
||||
|
||||
void notify();
|
||||
|
||||
void clear();
|
||||
|
||||
private:
|
||||
std::optional<int> fileDescriptor;
|
||||
|
||||
void close();
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user