Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/DDS/Generic/wait_set_handler.h

64 lines
1.7 KiB
C++

#pragma once
// Include Qt headers FIRST to prevent namespace pollution when RTI DDS headers include Qt
#include <QtCore/QString>
#include <QtCore/QUrl>
#include <QtCore/QFlag>
#include <dds/core/cond/Condition.hpp>
#include <dds/core/cond/GuardCondition.hpp>
#include <dds/core/cond/WaitSet.hpp>
#include <ddsgen_export.h>
#include <future>
#include <map>
namespace NGL
{
class INGLLogger;
}
namespace DDSGeneric
{
class DDSGEN_EXPORT WaitSetHandler final
{
public:
class CallbackInterface
{
public:
virtual ~CallbackInterface() = default;
virtual void dataAvailable() = 0;
};
WaitSetHandler();
~WaitSetHandler();
bool attachWaitSet(const dds::core::cond::Condition& cond, CallbackInterface* cb);
bool detachWaitSet(const dds::core::cond::Condition& cond, CallbackInterface* cb);
bool enableWaitSet(const dds::core::cond::Condition& cond, CallbackInterface* cb);
bool disableWaitSet(const dds::core::cond::Condition& cond, CallbackInterface* cb);
int attachedConditionCount() const;
private:
NGL::INGLLogger& m_logger;
void waitSetTask();
struct WaitSetData final
{
dds::core::cond::Condition condition;
CallbackInterface* callback = nullptr;
bool enabled = true;
bool needWaitSetAttach = false;
WaitSetData(const dds::core::cond::Condition& cond, CallbackInterface* cb) : condition(cond), callback(cb) {}
};
dds::core::cond::WaitSet m_waitSet;
dds::core::cond::GuardCondition m_abortCondition;
std::future<void> m_task;
std::mutex m_accessMutex;
std::map<const DDS_Condition*, WaitSetData> m_waitSetData;
};
} // namespace DDSGeneric