summaryrefslogtreecommitdiff
path: root/plugin/src/Caelestia/service.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/src/Caelestia/service.cpp')
-rw-r--r--plugin/src/Caelestia/service.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/plugin/src/Caelestia/service.cpp b/plugin/src/Caelestia/service.cpp
new file mode 100644
index 0000000..9c13421
--- /dev/null
+++ b/plugin/src/Caelestia/service.cpp
@@ -0,0 +1,39 @@
+#include "service.hpp"
+
+#include <QDebug>
+#include <QObject>
+
+namespace caelestia {
+
+Service::Service(QObject* parent)
+ : QObject(parent)
+ , m_refCount(0) {}
+
+int Service::refCount() const {
+ return m_refCount;
+}
+
+void Service::ref() {
+ if (m_refCount == 0) {
+ start();
+ }
+
+ m_refCount++;
+ emit refCountChanged();
+}
+
+void Service::unref() {
+ if (m_refCount == 0) {
+ qWarning() << "ServiceRef::unref: attempted to unref service with no active refs";
+ return;
+ }
+
+ m_refCount--;
+ emit refCountChanged();
+
+ if (m_refCount == 0) {
+ stop();
+ }
+}
+
+} // namespace caelestia