5#ifndef DBLUETOOTHREQUEST_H
6#define DBLUETOOTHREQUEST_H
10#include <QDBusConnection>
12#include <QStringBuilder>
14DBLUETOOTH_BEGIN_NAMESPACE
16template <
typename T =
void>
29 , m_msg(std::move(msg))
34 : m_dest(other.m_dest)
40 : m_dest(other.m_dest)
41 , m_msg(std::move(other.m_msg))
47 m_dest = other.m_dest;
54 m_dest = other.m_dest;
55 m_msg = std::move(other.m_msg);
61 QDBusMessage reply{m_msg.createReply(QVariant::fromValue<T>(value))};
62 return sendDBusMessage(reply);
67 const QDBusMessage &reply =
68 m_msg.createErrorReply(interfaceName() % QStringLiteral(
".Rejected"), QStringLiteral(
"Rejected"));
69 return sendDBusMessage(reply);
74 const QDBusMessage &reply =
75 m_msg.createErrorReply(interfaceName() % QStringLiteral(
".Canceled"), QStringLiteral(
"Canceled"));
76 return sendDBusMessage(reply);
80 QString interfaceName()
const
83 case RequestDest::OrgBluezAgent:
84 return QStringLiteral(
"org.bluez.Agent1");
85 case RequestDest::OrgBluezObexAgent:
86 return QStringLiteral(
"org.bluez.obex.Agent1");
88 qWarning() <<
"unexpected bluez interface";
94 bool sendDBusMessage(
const QDBusMessage &msg)
const
96#ifdef USE_FAKE_INTERFACE
97 const auto &Connection = QDBusConnection::sessionBus();
99 const auto &Connection = QDBusConnection::systemBus();
102 case RequestDest::OrgBluezAgent:
103 return Connection.send(msg);
104 case RequestDest::OrgBluezObexAgent:
105 return QDBusConnection::sessionBus().send(msg);
107 qWarning() <<
"unexpected bluez interface";
130 , m_msg(std::move(msg))
135 : m_dest(other.m_dest)
141 : m_dest(other.m_dest)
142 , m_msg(std::move(other.m_msg))
148 m_dest = other.m_dest;
155 m_dest = other.m_dest;
156 m_msg = std::move(other.m_msg);
162 const QDBusMessage &reply{m_msg.createReply()};
163 return sendDBusMessage(reply);
168 const QDBusMessage &reply =
169 m_msg.createErrorReply(interfaceName() % QStringLiteral(
".Rejected"), QStringLiteral(
"Rejected"));
170 return sendDBusMessage(reply);
175 const QDBusMessage &reply =
176 m_msg.createErrorReply(interfaceName() % QStringLiteral(
".Canceled"), QStringLiteral(
"Canceled"));
177 return sendDBusMessage(reply);
181 QString interfaceName()
const
184 case RequestDest::OrgBluezAgent:
185 return QStringLiteral(
"org.bluez.Agent1");
186 case RequestDest::OrgBluezObexAgent:
187 return QStringLiteral(
"org.bluez.obex.Agent1");
189 qWarning() <<
"unexpected bluez interface";
195 bool sendDBusMessage(
const QDBusMessage &msg)
const
197#ifdef USE_FAKE_INTERFACE
198 const auto &Connection = QDBusConnection::sessionBus();
200 const auto &Connection = QDBusConnection::systemBus();
203 case RequestDest::OrgBluezAgent:
204 return Connection.send(msg);
205 case RequestDest::OrgBluezObexAgent:
206 return QDBusConnection::sessionBus().send(msg);
208 qWarning() <<
"unexpected bluez interface";
218DBLUETOOTH_END_NAMESPACE
对于D-Bus请求的简单封装, 方便在自定义代理是处理来自蓝牙服务的请求
Definition: dbluetoothrequest.h:18
bool accept(const T &value) const
接受来自服务的请求
Definition: dbluetoothrequest.h:59
bool cancel() const
取消当前请求
Definition: dbluetoothrequest.h:72
bool reject() const
拒绝来自服务的请求
Definition: dbluetoothrequest.h:65
RequestDest
蓝牙请求的目标服务
Definition: dbluetoothtypes.h:18