summaryrefslogtreecommitdiff
path: root/src/CommonAPI/DBus/DBusProxyHelper.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/CommonAPI/DBus/DBusProxyHelper.h')
-rw-r--r--src/CommonAPI/DBus/DBusProxyHelper.h283
1 files changed, 0 insertions, 283 deletions
diff --git a/src/CommonAPI/DBus/DBusProxyHelper.h b/src/CommonAPI/DBus/DBusProxyHelper.h
deleted file mode 100644
index 336810d..0000000
--- a/src/CommonAPI/DBus/DBusProxyHelper.h
+++ /dev/null
@@ -1,283 +0,0 @@
-/* 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 COMMONAPI_DBUS_DBUS_PROXY_HELPER_H_
-#define COMMONAPI_DBUS_DBUS_PROXY_HELPER_H_
-
-#include "DBusMessage.h"
-#include "DBusSerializableArguments.h"
-#include "DBusProxyAsyncCallbackHandler.h"
-#include "DBusProxyConnection.h"
-
-#include <functional>
-#include <future>
-#include <memory>
-#include <string>
-
-namespace CommonAPI {
-namespace DBus {
-
-
-class DBusProxy;
-
-
-template< class, class >
-struct DBusProxyHelper;
-
-template<
- template<class ...> class _In, class... _InArgs,
- template <class...> class _Out, class... _OutArgs>
- struct DBusProxyHelper<_In<_InArgs...>, _Out<_OutArgs...>> {
-
- template <typename _DBusProxy = DBusProxy>
- static void callMethod(const _DBusProxy& dbusProxy,
- const char* methodName,
- const char* methodSignature,
- const _InArgs&... inArgs,
- CommonAPI::CallStatus& callStatus) {
-
- if (dbusProxy.isAvailableBlocking()) {
-
- DBusMessage dbusMessage = dbusProxy.createMethodCall(methodName, methodSignature);
-
- if (sizeof...(_InArgs) > 0) {
- DBusOutputStream outputStream(dbusMessage);
- const bool success = DBusSerializableArguments<_InArgs...>::serialize(outputStream,inArgs...);
- if (!success) {
- callStatus = CallStatus::OUT_OF_MEMORY;
- return;
- }
- outputStream.flush();
- }
-
- const bool dbusMessageSent = dbusProxy.getDBusConnection()->sendDBusMessage(dbusMessage);
- callStatus = dbusMessageSent ? CallStatus::SUCCESS : CallStatus::OUT_OF_MEMORY;
- } else {
- callStatus = CallStatus::NOT_AVAILABLE;
- }
- }
-
- template <typename _DBusProxy = DBusProxy>
- static void callMethodWithReply(
- const _DBusProxy& dbusProxy,
- DBusMessage& dbusMethodCall,
- const _InArgs&... inArgs,
- CommonAPI::CallStatus& callStatus,
- _OutArgs&... outArgs) {
-
- if (sizeof...(_InArgs) > 0) {
- DBusOutputStream outputStream(dbusMethodCall);
- const bool success = DBusSerializableArguments<_InArgs...>::serialize(outputStream, inArgs...);
- if (!success) {
- callStatus = CallStatus::OUT_OF_MEMORY;
- return;
- }
- outputStream.flush();
- }
-
- DBusError dbusError;
- DBusMessage dbusMessageReply = dbusProxy.getDBusConnection()->sendDBusMessageWithReplyAndBlock(dbusMethodCall, dbusError);
- if (dbusError || !dbusMessageReply.isMethodReturnType()) {
- callStatus = CallStatus::REMOTE_ERROR;
- return;
- }
-
- if (sizeof...(_OutArgs) > 0) {
- DBusInputStream inputStream(dbusMessageReply);
- const bool success = DBusSerializableArguments<_OutArgs...>::deserialize(inputStream, outArgs...);
- if (!success) {
- callStatus = CallStatus::REMOTE_ERROR;
- return;
- }
- }
- callStatus = CallStatus::SUCCESS;
- }
-
- template <typename _DBusProxy = DBusProxy>
- static void callMethodWithReply(
- const _DBusProxy& dbusProxy,
- const char* busName,
- const char* objPath,
- const char* interfaceName,
- const char* methodName,
- const char* methodSignature,
- const _InArgs&... inArgs,
- CommonAPI::CallStatus& callStatus,
- _OutArgs&... outArgs) {
- if (dbusProxy.isAvailableBlocking()) {
- DBusMessage dbusMethodCall = DBusMessage::createMethodCall(
- busName,
- objPath,
- interfaceName,
- methodName,
- methodSignature);
- callMethodWithReply(dbusProxy, dbusMethodCall, inArgs..., callStatus, outArgs...);
- } else {
- callStatus = CallStatus::NOT_AVAILABLE;
- }
- }
-
- template <typename _DBusProxy = DBusProxy>
- static void callMethodWithReply(
- const _DBusProxy& dbusProxy,
- const char* dbusInterfaceName,
- const char* methodName,
- const char* methodSignature,
- const _InArgs&... inArgs,
- CommonAPI::CallStatus& callStatus,
- _OutArgs&... outArgs) {
- callMethodWithReply(
- dbusProxy,
- dbusProxy.getDBusBusName().c_str(),
- dbusProxy.getDBusObjectPath().c_str(),
- dbusInterfaceName,
- methodName,
- methodSignature,
- inArgs...,
- callStatus,
- outArgs...);
- }
-
- template <typename _DBusProxy = DBusProxy>
- static void callMethodWithReply(
- const _DBusProxy& dbusProxy,
- const char* methodName,
- const char* methodSignature,
- const _InArgs&... inArgs,
- CommonAPI::CallStatus& callStatus,
- _OutArgs&... outArgs) {
-
- if (dbusProxy.isAvailableBlocking()) {
-
- DBusMessage dbusMethodCall = dbusProxy.createMethodCall(methodName, methodSignature);
-
- callMethodWithReply(dbusProxy, dbusMethodCall, inArgs..., callStatus, outArgs...);
-
- } else {
- callStatus = CallStatus::NOT_AVAILABLE;
- }
- }
-
- template <typename _DBusProxy = DBusProxy, typename _AsyncCallback>
- static std::future<CallStatus> callMethodAsync(
- const _DBusProxy& dbusProxy,
- const char* methodName,
- const char* methodSignature,
- const _InArgs&... inArgs,
- _AsyncCallback asyncCallback) {
- if (dbusProxy.isAvailable()) {
- DBusMessage dbusMethodCall = dbusProxy.createMethodCall(methodName, methodSignature);
-
- return callMethodAsync(dbusProxy, dbusMethodCall, inArgs..., asyncCallback);
-
- } else {
-
- CallStatus callStatus = CallStatus::NOT_AVAILABLE;
-
- std::tuple<_OutArgs...> argTuple;
- callCallbackOnNotAvailable(asyncCallback, typename make_sequence<sizeof...(_OutArgs)>::type(), argTuple);
-
- std::promise<CallStatus> promise;
- promise.set_value(callStatus);
- return promise.get_future();
- }
-
- }
-
- template <typename _DBusProxy = DBusProxy, typename _AsyncCallback>
- static std::future<CallStatus> callMethodAsync(
- const _DBusProxy& dbusProxy,
- const char* dbusInterfaceName,
- const char* methodName,
- const char* methodSignature,
- const _InArgs&... inArgs,
- _AsyncCallback asyncCallback) {
-
- return callMethodAsync(
- dbusProxy,
- dbusProxy.getDBusBusName().c_str(),
- dbusProxy.getDBusObjectPath().c_str(),
- dbusInterfaceName,
- methodName,
- methodSignature,
- inArgs...,
- asyncCallback);
- }
-
- template <typename _DBusProxy = DBusProxy, typename _AsyncCallback>
- static std::future<CallStatus> callMethodAsync(
- const _DBusProxy& dbusProxy,
- const char* busName,
- const char* objPath,
- const char* interfaceName,
- const char* methodName,
- const char* methodSignature,
- const _InArgs&... inArgs,
- _AsyncCallback asyncCallback) {
- if (dbusProxy.isAvailable()) {
- DBusMessage dbusMethodCall = DBusMessage::createMethodCall(
- busName,
- objPath,
- interfaceName,
- methodName,
- methodSignature);
- return callMethodAsync(dbusProxy, dbusMethodCall, inArgs..., asyncCallback);
- } else {
-
- CallStatus callStatus = CallStatus::NOT_AVAILABLE;
-
- std::tuple<_OutArgs...> argTuple;
- callCallbackOnNotAvailable(asyncCallback, typename make_sequence<sizeof...(_OutArgs)>::type(),argTuple);
-
- std::promise<CallStatus> promise;
- promise.set_value(callStatus);
- return promise.get_future();
- }
- }
-
-
- template <typename _DBusProxy = DBusProxy, typename _AsyncCallback>
- static std::future<CallStatus> callMethodAsync(
- const _DBusProxy& dbusProxy,
- DBusMessage& dbusMessage,
- const _InArgs&... inArgs,
- _AsyncCallback asyncCallback) {
-
- if (sizeof...(_InArgs) > 0) {
- DBusOutputStream outputStream(dbusMessage);
- const bool success = DBusSerializableArguments<_InArgs...>::serialize(outputStream, inArgs...);
- if (!success) {
- std::promise<CallStatus> promise;
- promise.set_value(CallStatus::OUT_OF_MEMORY);
- return promise.get_future();
- }
- outputStream.flush();
- }
-
- return dbusProxy.getDBusConnection()->sendDBusMessageWithReplyAsync(
- dbusMessage,
- DBusProxyAsyncCallbackHandler<_OutArgs...>::create(std::move(asyncCallback)));
-
- }
-
- template <int... _ArgIndices>
- static void callCallbackOnNotAvailable(std::function<void(CallStatus, _OutArgs...)> callback,
- index_sequence<_ArgIndices...>, std::tuple<_OutArgs...> argTuple) {
-
- const CallStatus callstatus = CallStatus::NOT_AVAILABLE;
- callback(callstatus, std::move(std::get<_ArgIndices>(argTuple))...);
- }
-};
-
-} // namespace DBus
-} // namespace CommonAPI
-
-#endif // COMMONAPI_DBUS_DBUS_PROXY_HELPER_H_