Fork Vasum on GitHub Official Vasum Wiki on Tizen.org
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
connection.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Contact: Piotr Bartosiewicz <p.bartosiewi@partner.samsung.com>
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License
17  */
18 
25 #ifndef DBUS_CONNECTION_HPP
26 #define DBUS_CONNECTION_HPP
27 
28 #include "utils/callback-guard.hpp"
29 
30 #include <memory>
31 #include <string>
32 #include <functional>
33 #include <map>
34 #include <gio/gio.h>
35 
36 
37 namespace dbus {
38 
39 
40 typedef std::unique_ptr<GVariant, void(*)(GVariant*)> GVariantPtr;
41 
46 public:
47  typedef std::shared_ptr<MethodResultBuilder> Pointer;
48 
49  virtual ~MethodResultBuilder() {}
50  virtual void set(GVariant* parameters) = 0;
51  virtual void setVoid() = 0;
52  virtual void setError(const std::string& name, const std::string& message) = 0;
53  virtual std::string getPeerName() = 0;
54 };
55 
60 public:
62  virtual GVariant* get() = 0; // throws DbusException on error
63 };
64 
73 public:
74  typedef std::unique_ptr<DbusConnection> Pointer;
75 
76  typedef std::function<void()> VoidCallback;
77 
78  typedef std::function<void(const std::string& objectPath,
79  const std::string& interface,
80  const std::string& methodName,
81  GVariant* parameters,
84 
85  typedef std::function<void(const std::string& name
87 
88  typedef std::function<void(const std::string& senderBusName,
89  const std::string& objectPath,
90  const std::string& interface,
91  const std::string& signalName,
92  GVariant* parameters
94 
95  typedef std::function<void(AsyncMethodCallResult& asyncMethodCallResult
97 
98  typedef unsigned int SubscriptionId;
99 
103  static Pointer create(const std::string& address);
104 
108  static Pointer createSystem();
109 
110  ~DbusConnection();
111 
116  void setName(const std::string& name,
118  const VoidCallback& onNameLost);
119 
123  void emitSignal(const std::string& objectPath,
124  const std::string& interface,
125  const std::string& name,
126  GVariant* parameters);
127 
134  const std::string& senderBusName = "",
135  const std::string& interface = "",
136  const std::string& objectPath ="",
137  const std::string& member = "");
138 
142  void signalUnsubscribe(SubscriptionId subscriptionId);
143 
148  void registerObject(const std::string& objectPath,
149  const std::string& objectDefinitionXml,
150  const MethodCallCallback& method,
151  const ClientVanishedCallback& vanish);
152 
156  GVariantPtr callMethod(const std::string& busName,
157  const std::string& objectPath,
158  const std::string& interface,
159  const std::string& method,
160  GVariant* parameters,
161  const std::string& replyType,
162  int timeoutMs = -1);
163 
167  void callMethodAsync(const std::string& busName,
168  const std::string& objectPath,
169  const std::string& interface,
170  const std::string& method,
171  GVariant* parameters,
172  const std::string& replyType,
173  const AsyncMethodCallCallback& callback,
174  int timeoutMs = -1);
175 
179  std::string introspect(const std::string& busName, const std::string& objectPath);
180 
181 private:
182  struct NameCallbacks {
185 
186  NameCallbacks(const VoidCallback& acquired, const VoidCallback& lost)
187  : nameAcquired(acquired), nameLost(lost) {}
188  };
189 
190  typedef std::map<std::string, guint> ClientsMap;
191 
196 
198  const ClientVanishedCallback& vanish,
199  DbusConnection *dbus)
200  : methodCall(method), clientVanished(vanish), dbusConn(dbus) {}
201  };
202 
206 
208  : clientVanished(vanish), watchedClients(clients) {}
209  };
210 
211  GDBusConnection* mConnection;
212  guint mNameId;
213  // It's only ever modified in the glib thread
215  // Guard must be destroyed before objects it protects
216  // (e.g. all of the above, see the destructor)
218 
219  DbusConnection(const std::string& address);
220 
221  static void onNameAcquired(GDBusConnection* connection, const gchar* name, gpointer userData);
222  static void onNameLost(GDBusConnection* connection, const gchar* name, gpointer userData);
223  static void onSignal(GDBusConnection* connection,
224  const gchar* sender,
225  const gchar* object,
226  const gchar* interface,
227  const gchar* name,
228  GVariant* parameters,
229  gpointer userData);
230  static void onMethodCall(GDBusConnection* connection,
231  const gchar* sender,
232  const gchar* objectPath,
233  const gchar* interface,
234  const gchar* method,
235  GVariant* parameters,
236  GDBusMethodInvocation* invocation,
237  gpointer userData);
238  static void onAsyncReady(GObject* source,
239  GAsyncResult* asyncResult,
240  gpointer userData);
241  static void onClientVanish(GDBusConnection* connection,
242  const gchar *name,
243  gpointer userData);
244 };
245 
246 
247 } // namespace dbus
248 
249 #endif // DBUS_CONNECTION_HPP
std::function< void(const std::string &name)> ClientVanishedCallback
Definition: connection.hpp:86
MethodCallCallback methodCall
Definition: connection.hpp:193
virtual void set(GVariant *parameters)=0
static void onSignal(GDBusConnection *connection, const gchar *sender, const gchar *object, const gchar *interface, const gchar *name, GVariant *parameters, gpointer userData)
Definition: connection.cpp:246
void setName(const std::string &name, const VoidCallback &onNameAcquired, const VoidCallback &onNameLost)
Sets a name to the dbus connection.
Definition: connection.cpp:169
void signalUnsubscribe(SubscriptionId subscriptionId)
Unsubscribes from a signal.
Definition: connection.cpp:241
~DbusConnection()
Definition: connection.cpp:150
Definition: connection.hpp:203
static void onClientVanish(GDBusConnection *connection, const gchar *name, gpointer userData)
Definition: connection.cpp:359
static Pointer createSystem()
Creates a connection to the system dbus.
Definition: connection.cpp:123
std::function< void(const std::string &senderBusName, const std::string &objectPath, const std::string &interface, const std::string &signalName, GVariant *parameters)> SignalCallback
Definition: connection.hpp:93
static Pointer create(const std::string &address)
Creates a connection to the dbus with given address.
Definition: connection.cpp:118
Callback guard.
Definition: connection.hpp:192
Callback guard.
Definition: callback-guard.hpp:38
virtual ~AsyncMethodCallResult()
Definition: connection.hpp:61
DbusConnection * dbusConn
Definition: connection.hpp:195
static void onMethodCall(GDBusConnection *connection, const gchar *sender, const gchar *objectPath, const gchar *interface, const gchar *method, GVariant *parameters, GDBusMethodInvocation *invocation, gpointer userData)
Definition: connection.cpp:321
Definition: connection.hpp:182
std::map< std::string, guint > ClientsMap
Definition: connection.hpp:190
ClientVanishedCallback clientVanished
Definition: connection.hpp:194
Dbus connection.
Definition: connection.hpp:72
virtual void setVoid()=0
ClientsMap mWatchedClients
Definition: connection.hpp:214
std::function< void(const std::string &objectPath, const std::string &interface, const std::string &methodName, GVariant *parameters, MethodResultBuilder::Pointer result)> MethodCallCallback
Definition: connection.hpp:83
An interface used to get result from async response.
Definition: connection.hpp:59
VanishedCallbacks(const ClientVanishedCallback &vanish, ClientsMap &clients)
Definition: connection.hpp:207
VoidCallback nameAcquired
Definition: connection.hpp:183
SubscriptionId signalSubscribe(const SignalCallback &callback, const std::string &senderBusName="", const std::string &interface="", const std::string &objectPath="", const std::string &member="")
Subscribes to a signal.
Definition: connection.cpp:222
utils::CallbackGuard mGuard
Definition: connection.hpp:217
guint mNameId
Definition: connection.hpp:212
void registerObject(const std::string &objectPath, const std::string &objectDefinitionXml, const MethodCallCallback &method, const ClientVanishedCallback &vanish)
Registers an object with given definition.
Definition: connection.cpp:276
GVariantPtr callMethod(const std::string &busName, const std::string &objectPath, const std::string &interface, const std::string &method, GVariant *parameters, const std::string &replyType, int timeoutMs=-1)
Call a dbus method.
Definition: connection.cpp:380
NameCallbacks(const VoidCallback &acquired, const VoidCallback &lost)
Definition: connection.hpp:186
ClientVanishedCallback clientVanished
Definition: connection.hpp:204
std::unique_ptr< GVariant, void(*)(GVariant *)> GVariantPtr
Definition: connection.hpp:40
ClientsMap & watchedClients
Definition: connection.hpp:205
An interface used to set a result to a method call.
Definition: connection.hpp:45
std::unique_ptr< DbusConnection > Pointer
Definition: connection.hpp:74
std::function< void()> VoidCallback
Definition: connection.hpp:76
std::function< void(AsyncMethodCallResult &asyncMethodCallResult)> AsyncMethodCallCallback
Definition: connection.hpp:96
std::shared_ptr< MethodResultBuilder > Pointer
Definition: connection.hpp:47
MethodCallbacks(const MethodCallCallback &method, const ClientVanishedCallback &vanish, DbusConnection *dbus)
Definition: connection.hpp:197
static void onNameAcquired(GDBusConnection *connection, const gchar *name, gpointer userData)
Definition: connection.cpp:184
DbusConnection(const std::string &address)
Definition: connection.cpp:128
virtual void setError(const std::string &name, const std::string &message)=0
std::string introspect(const std::string &busName, const std::string &objectPath)
Returns an xml with meta description of specified dbus object.
Definition: connection.cpp:263
virtual ~MethodResultBuilder()
Definition: connection.hpp:49
void emitSignal(const std::string &objectPath, const std::string &interface, const std::string &name, GVariant *parameters)
Emits dbus signal.
Definition: connection.cpp:202
static void onAsyncReady(GObject *source, GAsyncResult *asyncResult, gpointer userData)
Definition: connection.cpp:433
unsigned int SubscriptionId
Definition: connection.hpp:98
virtual std::string getPeerName()=0
void callMethodAsync(const std::string &busName, const std::string &objectPath, const std::string &interface, const std::string &method, GVariant *parameters, const std::string &replyType, const AsyncMethodCallCallback &callback, int timeoutMs=-1)
Async call a dbus method.
Definition: connection.cpp:409
VoidCallback nameLost
Definition: connection.hpp:184
static void onNameLost(GDBusConnection *connection, const gchar *name, gpointer userData)
Definition: connection.cpp:193
GDBusConnection * mConnection
Definition: connection.hpp:211