swift
hubproxy.cpp
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2020 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
7 
9 #include "misc/identifier.h"
11 #include "misc/variantlist.h"
12 
13 namespace swift::misc::shared_state::dbus
14 {
15  CHubProxy::CHubProxy(const QDBusConnection &connection, const QString &service, QObject *parent)
16  : IHub(parent), m_service(service)
17  {
18  m_interface =
20  m_interface->relayParentSignals();
21  }
22 
23  bool CHubProxy::isConnected() const { return m_interface->isValid(); }
24 
25  std::pair<QSharedPointer<IDuplex>, QFuture<bool>> CHubProxy::getDuplex(const CIdentifier &identifier)
26  {
27  auto duplex = QSharedPointer<CDuplexProxy>::create(m_interface->connection(), m_service, this);
28  connect(duplex.get(), &QObject::destroyed, this, [=] { closeDuplex(identifier); });
29  return std::make_pair(duplex, openDuplexAsync(identifier));
30  }
31 
32  bool CHubProxy::openDuplex(const CIdentifier &client)
33  {
34  return m_interface->callDBusRet<bool>(QLatin1String("openDuplex"), client);
35  }
36 
37  void CHubProxy::closeDuplex(const CIdentifier &client)
38  {
39  m_interface->callDBus(QLatin1String("closeDuplex"), client);
40  }
41 
42  QFuture<bool> CHubProxy::openDuplexAsync(const CIdentifier &client)
43  {
44  return m_interface->callDBusFuture<bool>(QLatin1String("openDuplex"), client);
45  }
46 
48 } // namespace swift::misc::shared_state::dbus
Used for hand written interface based on virtual methods.
QFuture< Ret > callDBusFuture(QLatin1String method, Args &&...args)
Call DBus with asynchronous return as a future.
void callDBus(QLatin1String method, Args &&...args)
Call DBus, no return value.
void relayParentSignals()
For each signal in parent, attempt to connect to it an interface signal of the same name.
Ret callDBusRet(QLatin1String method, Args &&...args)
Call DBus with synchronous return value.
Value object encapsulating information identifying a component of a modular distributed swift process...
Definition: identifier.h:29
static const CIdentifier & anonymous()
Returns an anonymous identifier, which is a valid identifier without name.
Definition: identifier.cpp:78
virtual QFuture< bool > openDuplexAsync(const CIdentifier &client)
Create a duplex object for the identified process.
Definition: hubproxy.cpp:42
CHubProxy(const QDBusConnection &connection, const QString &service, QObject *parent=nullptr)
Constructor.
Definition: hubproxy.cpp:15
virtual void closeDuplex(const swift::misc::CIdentifier &client)
Destroy the duplex object for the identified process.
Definition: hubproxy.cpp:37
virtual bool isConnected() const
Create a duplex object for the identified process.
Definition: hubproxy.cpp:23
virtual std::pair< QSharedPointer< IDuplex >, QFuture< bool > > getDuplex(const CIdentifier &)
Create a duplex object for the identified process.
Definition: hubproxy.cpp:25
virtual bool openDuplex(const swift::misc::CIdentifier &client)
Create a duplex object for the identified process.
Definition: hubproxy.cpp:32
Abstract interface for the hub in a star topology.
Definition: hub.h:37
#define SWIFT_MISC_HUB_INTERFACE
DBus interface for sharedstate hub.
Definition: hub.h:17
#define SWIFT_MISC_HUB_PATH
DBus object path root for sharedstate hub.
Definition: hub.h:20