From 2a0b81de5bea06470852917ebe96985df5dd7b55 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 8 Mar 2018 20:07:47 +0100 Subject: [PATCH] Ref T259, Ref T243 client provider used with network classes Also adds a dummy testing class --- samples/cliclient/client.cpp | 4 ++-- src/blackcore/context/contextnetworkimpl.cpp | 4 +++- src/blackcore/network.h | 13 ++++++++++--- src/blackcore/vatsim/networkvatlib.cpp | 5 +++-- src/blackcore/vatsim/networkvatlib.h | 5 ++++- src/blackmisc/network/clientprovider.cpp | 6 ++++++ src/blackmisc/network/clientprovider.h | 10 +++++++++- tests/blackcore/testnetwork.cpp | 7 ++++++- tests/blackcore/testnetwork.h | 5 +---- 9 files changed, 44 insertions(+), 15 deletions(-) diff --git a/samples/cliclient/client.cpp b/samples/cliclient/client.cpp index cb78ce3bc..8cb221f9e 100644 --- a/samples/cliclient/client.cpp +++ b/samples/cliclient/client.cpp @@ -45,18 +45,18 @@ using namespace BlackCore; using namespace BlackCore::Vatsim; using namespace BlackMisc; using namespace BlackMisc::Simulation; +using namespace BlackMisc::Network; using namespace BlackMisc::Aviation; using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::Geo; namespace BlackSample { - Client::Client(QObject *parent) : QObject(parent), COwnAircraftAware(COwnAircraftProviderDummy::instance()), CIdentifiable("samples:cmdClient"), - m_net(new CNetworkVatlib(COwnAircraftProviderDummy::instance(), this)) + m_net(new CNetworkVatlib(CClientProviderDummy::instance(), COwnAircraftProviderDummy::instance(), this)) { connect(m_net, &INetwork::atcPositionUpdate, this, &Client::atcPositionUpdate); connect(m_net, &INetwork::atcDisconnected, this, &Client::atcDisconnected); diff --git a/src/blackcore/context/contextnetworkimpl.cpp b/src/blackcore/context/contextnetworkimpl.cpp index 41dc689d3..ce827ea42 100644 --- a/src/blackcore/context/contextnetworkimpl.cpp +++ b/src/blackcore/context/contextnetworkimpl.cpp @@ -65,7 +65,7 @@ namespace BlackCore CContextNetwork::registerHelp(); // 1. Init by "network driver" - m_network = new CNetworkVatlib(this->getRuntime()->getCContextOwnAircraft(), this); + m_network = new CNetworkVatlib(nullptr, this->getRuntime()->getCContextOwnAircraft(), this); connect(m_network, &INetwork::connectionStatusChanged, this, &CContextNetwork::onFsdConnectionStatusChanged); connect(m_network, &INetwork::kicked, this, &CContextNetwork::kicked); connect(m_network, &INetwork::textMessagesReceived, this, &CContextNetwork::textMessagesReceived); @@ -80,6 +80,7 @@ namespace BlackCore // 3. Airspace contents Q_ASSERT_X(this->getRuntime()->getCContextOwnAircraft(), Q_FUNC_INFO, "this and own aircraft context must be local"); m_airspace = new CAirspaceMonitor(this->getRuntime()->getCContextOwnAircraft(), m_network, this); + m_network->setClientProvider(m_airspace); connect(m_airspace, &CAirspaceMonitor::changedAtcStationsOnline, this, &CContextNetwork::changedAtcStationsOnline); connect(m_airspace, &CAirspaceMonitor::changedAtcStationsBooked, this, &CContextNetwork::changedAtcStationsBooked); connect(m_airspace, &CAirspaceMonitor::changedAtcStationOnlineConnectionStatus, this, &CContextNetwork::changedAtcStationOnlineConnectionStatus); @@ -146,6 +147,7 @@ namespace BlackCore { this->disconnect(); // all signals if (this->isConnected()) { this->disconnectFromNetwork(); } + if (m_network) { m_network->setClientProvider(nullptr); } if (m_airspace) { m_airspace->gracefulShutdown(); } } diff --git a/src/blackcore/network.h b/src/blackcore/network.h index 421a9ff98..8bec27ed0 100644 --- a/src/blackcore/network.h +++ b/src/blackcore/network.h @@ -17,13 +17,15 @@ #include "blackmisc/simulation/simulationenvironmentprovider.h" #include "blackmisc/simulation/simulatorplugininfo.h" #include "blackmisc/simulation/simulatedaircraft.h" -#include "blackmisc/geo/coordinategeodetic.h" #include "blackmisc/network/rawfsdmessage.h" #include "blackmisc/network/serverlist.h" +#include "blackmisc/network/clientprovider.h" +#include "blackmisc/network/clientlist.h" #include "blackmisc/network/textmessagelist.h" #include "blackmisc/aviation/informationmessage.h" #include "blackmisc/aviation/flightplan.h" #include "blackmisc/aviation/callsignset.h" +#include "blackmisc/geo/coordinategeodetic.h" #include "blackmisc/pq/frequency.h" #include "blackmisc/pq/length.h" #include "blackmisc/pq/time.h" @@ -57,6 +59,7 @@ namespace BlackCore */ class BLACKCORE_EXPORT INetwork : public QObject, + public BlackMisc::Network::CClientAware, // network vatlib consumes own aircraft data and sets ICAO/callsign data public BlackMisc::Simulation::COwnAircraftAware, // network vatlib consumes own aircraft data and sets ICAO/callsign data public BlackMisc::Simulation::CSimulationEnvironmentAware // allows to consume ground elevations { @@ -66,9 +69,13 @@ namespace BlackCore /*! * Constructor */ - INetwork(BlackMisc::Simulation::IOwnAircraftProvider *ownAircraft, QObject *parent = nullptr) : + INetwork( + BlackMisc::Network::IClientProvider *clientProvider, + BlackMisc::Simulation::IOwnAircraftProvider *ownAircraftProvider, + QObject *parent = nullptr) : QObject(parent), - BlackMisc::Simulation::COwnAircraftAware(ownAircraft) {} + BlackMisc::Network::CClientAware(clientProvider), + BlackMisc::Simulation::COwnAircraftAware(ownAircraftProvider) {} public: /*! diff --git a/src/blackcore/vatsim/networkvatlib.cpp b/src/blackcore/vatsim/networkvatlib.cpp index 4a6e338f3..38bd66a33 100644 --- a/src/blackcore/vatsim/networkvatlib.cpp +++ b/src/blackcore/vatsim/networkvatlib.cpp @@ -83,8 +83,9 @@ namespace BlackCore return cats; } - CNetworkVatlib::CNetworkVatlib(IOwnAircraftProvider *ownAircraft, QObject *parent) - : INetwork(ownAircraft, parent), + CNetworkVatlib::CNetworkVatlib(IClientProvider *clientProvider, + IOwnAircraftProvider *ownAircraftProvider, QObject *parent) + : INetwork(clientProvider, ownAircraftProvider, parent), m_loginMode(LoginNormal), m_status(vatStatusDisconnected), m_tokenBucket(10, CTime(5, CTimeUnit::s()), 1) diff --git a/src/blackcore/vatsim/networkvatlib.h b/src/blackcore/vatsim/networkvatlib.h index 9468cc2b2..efbabdc90 100644 --- a/src/blackcore/vatsim/networkvatlib.h +++ b/src/blackcore/vatsim/networkvatlib.h @@ -64,7 +64,10 @@ namespace BlackCore static const BlackMisc::CLogCategoryList &getLogCategories(); //! Constructor - CNetworkVatlib(BlackMisc::Simulation::IOwnAircraftProvider *ownAircraft, QObject *parent = nullptr); + CNetworkVatlib( + BlackMisc::Network::IClientProvider *clientProvider, + BlackMisc::Simulation::IOwnAircraftProvider *ownAircraftProvider, + QObject *parent = nullptr); //! Destructor virtual ~CNetworkVatlib(); diff --git a/src/blackmisc/network/clientprovider.cpp b/src/blackmisc/network/clientprovider.cpp index 784292be0..b6183a6e3 100644 --- a/src/blackmisc/network/clientprovider.cpp +++ b/src/blackmisc/network/clientprovider.cpp @@ -118,6 +118,12 @@ namespace BlackMisc if (m_clientProvider) { return m_clientProvider->removeClient(callsign); } return 0; } + + CClientProviderDummy *CClientProviderDummy::instance() + { + static CClientProviderDummy *dummy = new CClientProviderDummy(); + return dummy; + } } // namespace } // namespace diff --git a/src/blackmisc/network/clientprovider.h b/src/blackmisc/network/clientprovider.h index ce9a61aa9..36c26e437 100644 --- a/src/blackmisc/network/clientprovider.h +++ b/src/blackmisc/network/clientprovider.h @@ -105,9 +105,17 @@ namespace BlackMisc CClientAware() {} //! Constructor - CClientAware(IClientProvider *clientProvider) : m_clientProvider(clientProvider) { Q_ASSERT(clientProvider); } + CClientAware(IClientProvider *clientProvider) : m_clientProvider(clientProvider) { } IClientProvider *m_clientProvider = nullptr; //!< access to object }; + + //! Client provider dummy for testing + class BLACKMISC_EXPORT CClientProviderDummy: public IClientProvider + { + public: + //! Dummy instance + static CClientProviderDummy *instance(); + }; } // namespace } // namespace diff --git a/tests/blackcore/testnetwork.cpp b/tests/blackcore/testnetwork.cpp index ac10e7b3b..cd13ea961 100644 --- a/tests/blackcore/testnetwork.cpp +++ b/tests/blackcore/testnetwork.cpp @@ -43,6 +43,11 @@ using namespace BlackMisc::PhysicalQuantities; namespace BlackCoreTest { + CTestNetwork::CTestNetwork(QObject *parent) : + QObject(parent), + m_networkVatlib(CClientProviderDummy::instance(), COwnAircraftProviderDummy::instance(), parent) + {} + void CTestNetwork::networkTest(BlackCore::INetwork *net) { const CServer fsdServer = CServer::swiftFsdTestServer(true); @@ -76,7 +81,7 @@ namespace BlackCoreTest EXPECT_UNIT(e) .send(&INetwork::sendPing, "server") - .expect(&INetwork::pongReceived, [](const CCallsign &callsign, const PhysicalQuantities::CTime &elapsedTime) + .expect(&INetwork::pongReceived, [](const CCallsign & callsign, const PhysicalQuantities::CTime & elapsedTime) { qDebug() << "PONG" << callsign << elapsedTime; }) diff --git a/tests/blackcore/testnetwork.h b/tests/blackcore/testnetwork.h index 83f133bab..f4fbb6557 100644 --- a/tests/blackcore/testnetwork.h +++ b/tests/blackcore/testnetwork.h @@ -33,10 +33,7 @@ namespace BlackCoreTest public: //! Constructor. - explicit CTestNetwork(QObject *parent = nullptr) : - QObject(parent), - m_networkVatlib(BlackMisc::Simulation::COwnAircraftProviderDummy::instance(), parent) - {} + explicit CTestNetwork(QObject *parent = nullptr); private slots: //! Test the vatlib