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
93
94
95
|
/*
Copyright (C) 2012 Intel Corporation
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef ABSTRACTDBUSINTERFACE_H
#define ABSTRACTDBUSINTERFACE_H
#include <string>
#include <functional>
#include <unordered_map>
#include <list>
#include <gio/gio.h>
#include <boost/any.hpp>
#include <nullptr.h>
class AbstractProperty;
using namespace std;
class AbstractDBusInterface
{
public:
AbstractDBusInterface(string interfaceName, string objectPath, GDBusConnection* connection);
virtual ~AbstractDBusInterface();
void setDBusConnection(GDBusConnection* connection)
{
mConnection = connection;
}
void registerObject();
void unregisterObject();
void addProperty(AbstractProperty* property);
virtual void updateValue(AbstractProperty* property);
static list<string> implementedProperties() { return mimplementedProperties; }
static AbstractDBusInterface* getInterfaceForProperty(std::string property);
bool implementsProperty(std::string property);
std::string objectPath() { return mObjectPath; }
void setObjectPath(std::string op)
{
mObjectPath = op;
}
std::string propertyName() { return mPropertyName; }
protected:
void startRegistration();
static GVariant *getProperty(GDBusConnection * connection, const gchar * sender, const gchar *objectPath,
const gchar *interfaceName, const gchar * propertyName, GError** error,
gpointer userData);
static gboolean setProperty(GDBusConnection * connection, const gchar * sender, const gchar *objectPath,
const gchar *interfaceName, const gchar * propertyName, GVariant *value,
GError** error, gpointer userData);
virtual void setProperty(string propertyName, GVariant * value);
virtual GVariant * getProperty(string propertyName);
unordered_map<string, AbstractProperty*> properties;
private:
string mInterfaceName;
string mObjectPath;
string mPropertyName;
string introspectionXml;
GDBusConnection * mConnection;
static unordered_map<string, AbstractDBusInterface*> interfaceMap;
static list<string> mimplementedProperties;
guint regId;
};
#endif // ABSTRACTDBUSINTERFACE_H
|