blob: 439d5305b46e45a3b091e907e8c78ad7b1bc5e9b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
/* Copyright (C) 2013 BMW Group
* Author: Manfred Bathelt (manfred.bathelt@bmw.de)
* Author: Juergen Gehring (juergen.gehring@bmw.de)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#if !defined (COMMONAPI_INTERNAL_COMPILATION)
#error "Only <CommonAPI/CommonAPI.h> can be included directly, this file may disappear or change contents."
#endif
#ifndef DBUS_MAINLOOPCONTEXT_H_
#define DBUS_MAINLOOPCONTEXT_H_
#include <list>
#include <memory>
#include <CommonAPI/MainLoopContext.h>
#include <dbus/dbus.h>
namespace CommonAPI {
namespace DBus {
class DBusConnection;
class DBusDispatchSource: public DispatchSource {
public:
DBusDispatchSource(DBusConnection* dbusConnection);
~DBusDispatchSource();
bool prepare(int64_t& timeout);
bool check();
bool dispatch();
private:
DBusConnection* dbusConnection_;
};
class DBusWatch: public Watch {
public:
DBusWatch(::DBusWatch* libdbusWatch, std::weak_ptr<MainLoopContext>& mainLoopContext);
bool isReadyToBeWatched();
void startWatching();
void stopWatching();
void dispatch(unsigned int eventFlags);
const pollfd& getAssociatedFileDescriptor();
const std::vector<DispatchSource*>& getDependentDispatchSources();
void addDependentDispatchSource(DispatchSource* dispatchSource);
private:
bool isReady();
::DBusWatch* libdbusWatch_;
pollfd pollFileDescriptor_;
std::vector<DispatchSource*> dependentDispatchSources_;
std::weak_ptr<MainLoopContext> mainLoopContext_;
};
class DBusTimeout: public Timeout {
public:
DBusTimeout(::DBusTimeout* libdbusTimeout, std::weak_ptr<MainLoopContext>& mainLoopContext);
bool isReadyToBeMonitored();
void startMonitoring();
void stopMonitoring();
bool dispatch();
int64_t getTimeoutInterval() const;
int64_t getReadyTime() const;
private:
void recalculateDueTime();
int64_t dueTimeInMs_;
::DBusTimeout* libdbusTimeout_;
std::weak_ptr<MainLoopContext> mainLoopContext_;
};
} // namespace DBus
} // namespace CommonAPI
#endif
|