Program Listing for File HsmEventDispatcherGLibmm.hpp
↰ Return to documentation for file (include/hsmcpp/HsmEventDispatcherGLibmm.hpp
)
// Copyright (C) 2021 Igor Krechetov
// Distributed under MIT license. See file LICENSE for details
#ifndef HSMCPP_HSMEVENTDISPATCHERGLIBMM_HPP
#define HSMCPP_HSMEVENTDISPATCHERGLIBMM_HPP
#include <glibmm.h>
#include <memory>
#include "HsmEventDispatcherBase.hpp"
namespace hsmcpp {
class HsmEventDispatcherGLibmm : public HsmEventDispatcherBase {
public:
static std::shared_ptr<HsmEventDispatcherGLibmm> create(const size_t eventsCacheSize = DISPATCHER_DEFAULT_EVENTS_CACHESIZE);
static std::shared_ptr<HsmEventDispatcherGLibmm> create(const Glib::RefPtr<Glib::MainContext>& context,
const size_t eventsCacheSize = DISPATCHER_DEFAULT_EVENTS_CACHESIZE);
bool start() override;
void stop() override;
void emitEvent(const HandlerID_t handlerID) override;
protected:
explicit HsmEventDispatcherGLibmm(const size_t eventsCacheSize = DISPATCHER_DEFAULT_EVENTS_CACHESIZE);
HsmEventDispatcherGLibmm(const Glib::RefPtr<Glib::MainContext>& context,
const size_t eventsCacheSize = DISPATCHER_DEFAULT_EVENTS_CACHESIZE);
virtual ~HsmEventDispatcherGLibmm();
bool deleteSafe() override;
void unregisterAllTimerHandlers();
void startTimerImpl(const TimerID_t timerID, const unsigned int intervalMs, const bool isSingleShot) override;
void stopTimerImpl(const TimerID_t timerID) override;
void notifyDispatcherAboutEvent() override;
bool onTimerEvent(const TimerID_t timerID);
private:
Glib::RefPtr<Glib::MainContext> mMainContext;
std::unique_ptr<Glib::Dispatcher> mDispatcher;
sigc::connection mDispatcherConnection;
std::map<TimerID_t, sigc::connection> mNativeTimerHandlers; // protected by mRunningTimersSync
};
} // namespace hsmcpp
#endif // HSMCPP_HSMEVENTDISPATCHERGLIBMM_HPP