swift
dbusserver.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2018 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
4 #include "dbusserver.h"
5 
6 #include <algorithm>
7 #include <cassert>
8 #include <memory>
9 #include <utility>
10 
11 #include "dbusobject.h"
12 #include "utils.h"
13 
14 namespace XSwiftBus
15 {
16  CDBusServer::CDBusServer() { dbus_threads_init_default(); }
17 
19 
20  bool CDBusServer::listen(const std::string &address)
21  {
22  DBusError error;
23  dbus_error_init(&error);
24  m_server.reset(dbus_server_listen(address.c_str(), &error));
25 
26  if (!m_server)
27  {
28  ERROR_LOG("DBus failed to listen for new connections on given address: " + std::string(error.message));
29  return false;
30  }
31  dbus_server_set_new_connection_function(m_server.get(), onNewConnection, this, nullptr);
32  return true;
33  }
34 
35  bool CDBusServer::isConnected() const { return m_server ? dbus_server_get_is_connected(m_server.get()) : false; }
36 
38  {
39  if (m_server) { dbus_server_disconnect(m_server.get()); }
40  }
41 
43  {
44  assert(dispatcher);
45  assert(m_server);
46 
47  m_dispatcher = dispatcher;
48 
49  dbus_server_set_watch_functions(m_server.get(), dispatcher->m_watchCallbacks.add,
50  dispatcher->m_watchCallbacks.remove, dispatcher->m_watchCallbacks.toggled,
51  &dispatcher->m_watchCallbacks, nullptr);
52 
53  dbus_server_set_timeout_functions(m_server.get(), dispatcher->m_timeoutCallbacks.add,
54  dispatcher->m_timeoutCallbacks.remove, dispatcher->m_timeoutCallbacks.toggled,
55  &dispatcher->m_timeoutCallbacks, nullptr);
56  }
57 
58  void CDBusServer::onNewConnection(DBusServer *, DBusConnection *conn)
59  {
60  // called by listener and the DBus connection for xSwiftBus afterwards
61  INFO_LOG("onNewConnection");
62  auto dbusConnection = std::make_shared<CDBusConnection>(conn);
63  m_newConnectionFunc(dbusConnection);
64  }
65 
66  void CDBusServer::onNewConnection(DBusServer *server, DBusConnection *conn, void *data)
67  {
68  auto *obj = static_cast<CDBusServer *>(data);
69  obj->onNewConnection(server, conn);
70  }
71 } // namespace XSwiftBus
void close()
Close connection.
Definition: dbusserver.cpp:37
virtual ~CDBusServer()
Destructor.
Definition: dbusserver.cpp:18
bool listen(const std::string &address)
Connect to bus.
Definition: dbusserver.cpp:20
void setDispatcher(CDBusDispatcher *dispatcher)
Set the dispatcher.
Definition: dbusserver.cpp:42
CDBusServer()
Constructor.
Definition: dbusserver.cpp:16
bool isConnected() const
Is connected?
Definition: dbusserver.cpp:35
Plugin loaded by X-Plane which publishes a DBus service.
Definition: command.h:14
#define ERROR_LOG(msg)
Logger convenience macros.
Definition: utils.h:52
#define INFO_LOG(msg)
Logger convenience macros.
Definition: utils.h:50