first commit
This commit is contained in:
74
src/Network/Swift/plugin.cpp
Normal file
74
src/Network/Swift/plugin.cpp
Normal file
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: (C) 2019-2022 swift Project Community / Contributors (https://swift-project.org/)
|
||||
* SPDX-FileCopyrightText: (C) 2019-2022 Lars Toenning <dev@ltoenning.de>
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "plugin.h"
|
||||
#include "service.h"
|
||||
#include "traffic.h"
|
||||
|
||||
#include <Main/fg_props.hxx>
|
||||
#include <Main/globals.hxx>
|
||||
#include <functional>
|
||||
#include <iostream>
|
||||
#include <simgear/structure/commands.hxx>
|
||||
#include <thread>
|
||||
|
||||
namespace {
|
||||
inline std::string fgswiftbusServiceName()
|
||||
{
|
||||
return "org.swift-project.fgswiftbus";
|
||||
}
|
||||
} // namespace
|
||||
|
||||
namespace FGSwiftBus {
|
||||
CPlugin::CPlugin()
|
||||
{
|
||||
startServer();
|
||||
}
|
||||
|
||||
CPlugin::~CPlugin()
|
||||
{
|
||||
if (m_dbusConnection) {
|
||||
m_dbusConnection->close();
|
||||
}
|
||||
m_shouldStop = true;
|
||||
if (m_dbusThread.joinable()) { m_dbusThread.join(); }
|
||||
}
|
||||
|
||||
void CPlugin::startServer()
|
||||
{
|
||||
m_service.reset(new CService());
|
||||
m_traffic.reset(new CTraffic());
|
||||
m_dbusP2PServer.reset(new CDBusServer());
|
||||
|
||||
std::string ip = fgGetString("/sim/swift/address", "127.0.0.1");
|
||||
std::string port = fgGetString("/sim/swift/port", "45003");
|
||||
std::string listenAddress = "tcp:host=" + ip + ",port=" + port;
|
||||
if (!m_dbusP2PServer->listen(listenAddress)) {
|
||||
m_service->addTextMessage("FGSwiftBus startup failed!");
|
||||
return;
|
||||
}
|
||||
|
||||
m_dbusP2PServer->setDispatcher(&m_dbusDispatcher);
|
||||
m_dbusP2PServer->setNewConnectionFunc([this](const std::shared_ptr<CDBusConnection>& conn) {
|
||||
m_dbusConnection = conn;
|
||||
m_dbusConnection->setDispatcher(&m_dbusDispatcher);
|
||||
m_service->setDBusConnection(m_dbusConnection);
|
||||
m_service->registerDBusObjectPath(m_service->InterfaceName(), m_service->ObjectPath());
|
||||
m_traffic->setDBusConnection(m_dbusConnection);
|
||||
m_traffic->registerDBusObjectPath(m_traffic->InterfaceName(), m_traffic->ObjectPath());
|
||||
});
|
||||
|
||||
SG_LOG(SG_NETWORK, SG_INFO, "FGSwiftBus started");
|
||||
}
|
||||
|
||||
void CPlugin::fastLoop()
|
||||
{
|
||||
this->m_dbusDispatcher.runOnce();
|
||||
this->m_service->process();
|
||||
this->m_traffic->process();
|
||||
this->m_traffic->emitSimFrame();
|
||||
}
|
||||
} // namespace FGSwiftBus
|
||||
Reference in New Issue
Block a user