mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-20 04:25:42 +08:00
Upgrade to vatlib v0.9.7
This commit is contained in:
committed by
Klaus Basan
parent
dd0f4058f2
commit
d68f678cc5
Submodule externals updated: fe097bc329...db480d4361
@@ -7,6 +7,7 @@
|
|||||||
* contained in the LICENSE file.
|
* contained in the LICENSE file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "blackcore/audiodevice.h"
|
#include "blackcore/audiodevice.h"
|
||||||
#include "blackcore/audiomixer.h"
|
#include "blackcore/audiomixer.h"
|
||||||
#include "blackcore/context/contextaudioimpl.h"
|
#include "blackcore/context/contextaudioimpl.h"
|
||||||
|
|||||||
@@ -35,9 +35,8 @@ namespace BlackCore
|
|||||||
return static_cast<CAudioOutputDeviceVatlib *>(cbvar);
|
return static_cast<CAudioOutputDeviceVatlib *>(cbvar);
|
||||||
}
|
}
|
||||||
|
|
||||||
CAudioInputDeviceVatlib::CAudioInputDeviceVatlib(VatAudioService audioService, QObject *parent)
|
CAudioInputDeviceVatlib::CAudioInputDeviceVatlib(VatAudioService *audioService, QObject *parent)
|
||||||
: IAudioInputDevice(parent),
|
: IAudioInputDevice(parent)
|
||||||
m_audioService(audioService)
|
|
||||||
{
|
{
|
||||||
m_inputCodec.reset(Vat_CreateLocalInputCodec(audioService, vatCodecLegacy));
|
m_inputCodec.reset(Vat_CreateLocalInputCodec(audioService, vatCodecLegacy));
|
||||||
Vat_GetInputDeviceInfo(m_inputCodec.data(), onInputHardwareDeviceReceived, this, nullptr);
|
Vat_GetInputDeviceInfo(m_inputCodec.data(), onInputHardwareDeviceReceived, this, nullptr);
|
||||||
@@ -82,11 +81,10 @@ namespace BlackCore
|
|||||||
cbvar_cast_inputDevice(cbVar)->m_devices.push_back(inputDevice);
|
cbvar_cast_inputDevice(cbVar)->m_devices.push_back(inputDevice);
|
||||||
}
|
}
|
||||||
|
|
||||||
CAudioOutputDeviceVatlib::CAudioOutputDeviceVatlib(VatAudioService audioService, QObject *parent)
|
CAudioOutputDeviceVatlib::CAudioOutputDeviceVatlib(VatAudioService *audioService, QObject *parent)
|
||||||
: IAudioOutputDevice(parent),
|
: IAudioOutputDevice(parent)
|
||||||
m_audioService(audioService)
|
|
||||||
{
|
{
|
||||||
m_outputCodec.reset(Vat_CreateLocalOutputCodec(m_audioService, vatCodecLegacy));
|
m_outputCodec.reset(Vat_CreateLocalOutputCodec(audioService, vatCodecLegacy));
|
||||||
Vat_GetOutputDeviceInfo(m_outputCodec.data(), onOutputHardwareDeviceReceived, this, nullptr);
|
Vat_GetOutputDeviceInfo(m_outputCodec.data(), onOutputHardwareDeviceReceived, this, nullptr);
|
||||||
m_currentDevice = getDefaultOutputDevice();
|
m_currentDevice = getDefaultOutputDevice();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,9 +21,6 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QScopedPointer>
|
#include <QScopedPointer>
|
||||||
|
|
||||||
struct VatConsumer_tag;
|
|
||||||
struct VatProducer_tag;
|
|
||||||
|
|
||||||
namespace BlackCore
|
namespace BlackCore
|
||||||
{
|
{
|
||||||
namespace Vatsim
|
namespace Vatsim
|
||||||
@@ -36,7 +33,7 @@ namespace BlackCore
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
CAudioInputDeviceVatlib(VatAudioService audioService, QObject *parent = nullptr);
|
CAudioInputDeviceVatlib(VatAudioService *audioService, QObject *parent = nullptr);
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~CAudioInputDeviceVatlib() = default;
|
virtual ~CAudioInputDeviceVatlib() = default;
|
||||||
@@ -54,13 +51,13 @@ namespace BlackCore
|
|||||||
virtual void setInputDevice(const BlackMisc::Audio::CAudioDeviceInfo &device) override;
|
virtual void setInputDevice(const BlackMisc::Audio::CAudioDeviceInfo &device) override;
|
||||||
|
|
||||||
//! Get vatlib input device pointer
|
//! Get vatlib input device pointer
|
||||||
VatLocalInputCodec getVatLocalInputCodec() { return m_inputCodec.data(); }
|
VatLocalInputCodec *getVatLocalInputCodec() { return m_inputCodec.data(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
struct VatLocalInputCodecDeleter
|
struct VatLocalInputCodecDeleter
|
||||||
{
|
{
|
||||||
static inline void cleanup(VatProducer_tag *obj)
|
static inline void cleanup(VatLocalInputCodec *obj)
|
||||||
{
|
{
|
||||||
if (obj) Vat_DestroyLocalInputCodec(obj);
|
if (obj) Vat_DestroyLocalInputCodec(obj);
|
||||||
}
|
}
|
||||||
@@ -71,8 +68,7 @@ namespace BlackCore
|
|||||||
BlackMisc::Audio::CAudioDeviceInfoList m_devices; /*!< in and output devices */
|
BlackMisc::Audio::CAudioDeviceInfoList m_devices; /*!< in and output devices */
|
||||||
BlackMisc::Audio::CAudioDeviceInfo m_currentDevice;
|
BlackMisc::Audio::CAudioDeviceInfo m_currentDevice;
|
||||||
|
|
||||||
VatAudioService m_audioService;
|
QScopedPointer<VatLocalInputCodec, VatLocalInputCodecDeleter> m_inputCodec;
|
||||||
QScopedPointer<VatProducer_tag, VatLocalInputCodecDeleter> m_inputCodec;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Audio Output Device
|
//! Audio Output Device
|
||||||
@@ -83,7 +79,7 @@ namespace BlackCore
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
CAudioOutputDeviceVatlib(VatAudioService audioService, QObject *parent = nullptr);
|
CAudioOutputDeviceVatlib(VatAudioService *audioService, QObject *parent = nullptr);
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~CAudioOutputDeviceVatlib() = default;
|
virtual ~CAudioOutputDeviceVatlib() = default;
|
||||||
@@ -107,13 +103,13 @@ namespace BlackCore
|
|||||||
virtual int getOutputVolume() const override;
|
virtual int getOutputVolume() const override;
|
||||||
|
|
||||||
//! Get vatlib output device pointer
|
//! Get vatlib output device pointer
|
||||||
VatLocalOutputCodec getVatLocalOutputCodec() { return m_outputCodec.data(); }
|
VatLocalOutputCodec *getVatLocalOutputCodec() { return m_outputCodec.data(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
struct VatLocalOutputCodecDeleter
|
struct VatLocalOutputCodecDeleter
|
||||||
{
|
{
|
||||||
static inline void cleanup(VatConsumer_tag *obj)
|
static inline void cleanup(VatLocalOutputCodec *obj)
|
||||||
{
|
{
|
||||||
if (obj) Vat_DestroyLocalOutputCodec(obj);
|
if (obj) Vat_DestroyLocalOutputCodec(obj);
|
||||||
}
|
}
|
||||||
@@ -125,8 +121,7 @@ namespace BlackCore
|
|||||||
BlackMisc::Audio::CAudioDeviceInfoList m_devices; /*!< in and output devices */
|
BlackMisc::Audio::CAudioDeviceInfoList m_devices; /*!< in and output devices */
|
||||||
BlackMisc::Audio::CAudioDeviceInfo m_currentDevice;
|
BlackMisc::Audio::CAudioDeviceInfo m_currentDevice;
|
||||||
|
|
||||||
VatAudioService m_audioService;
|
QScopedPointer<VatLocalOutputCodec, VatLocalOutputCodecDeleter> m_outputCodec;
|
||||||
QScopedPointer<VatConsumer_tag, VatLocalOutputCodecDeleter> m_outputCodec;
|
|
||||||
};
|
};
|
||||||
} // ns
|
} // ns
|
||||||
} // ns
|
} // ns
|
||||||
|
|||||||
@@ -20,8 +20,6 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QScopedPointer>
|
#include <QScopedPointer>
|
||||||
|
|
||||||
struct VatProducerConsumer_tag;
|
|
||||||
|
|
||||||
namespace BlackCore
|
namespace BlackCore
|
||||||
{
|
{
|
||||||
namespace Vatsim
|
namespace Vatsim
|
||||||
@@ -52,19 +50,19 @@ namespace BlackCore
|
|||||||
virtual bool hasMixerConnection(InputPort inputPort, OutputPort outputPort) override;
|
virtual bool hasMixerConnection(InputPort inputPort, OutputPort outputPort) override;
|
||||||
|
|
||||||
//! Return the pointer to vatlib audio mixer
|
//! Return the pointer to vatlib audio mixer
|
||||||
VatAudioMixer getVatAudioMixer() { return m_audioMixer.data(); }
|
VatAudioMixer *getVatAudioMixer() { return m_audioMixer.data(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
struct VatAudioMixerDeleter
|
struct VatAudioMixerDeleter
|
||||||
{
|
{
|
||||||
static inline void cleanup(VatProducerConsumer_tag *obj)
|
static inline void cleanup(VatAudioMixer *obj)
|
||||||
{
|
{
|
||||||
if (obj) Vat_DestroyAudioMixer(obj);
|
if (obj) Vat_DestroyAudioMixer(obj);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
QScopedPointer<VatProducerConsumer_tag, VatAudioMixerDeleter> m_audioMixer;
|
QScopedPointer<VatAudioMixer, VatAudioMixerDeleter> m_audioMixer;
|
||||||
};
|
};
|
||||||
} // ns
|
} // ns
|
||||||
} // ns
|
} // ns
|
||||||
|
|||||||
@@ -60,7 +60,7 @@
|
|||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
static_assert(! std::is_abstract<BlackCore::Vatsim::CNetworkVatlib>::value, "Must implement all pure virtuals");
|
static_assert(! std::is_abstract<BlackCore::Vatsim::CNetworkVatlib>::value, "Must implement all pure virtuals");
|
||||||
static_assert(VAT_LIBVATLIB_VERSION == 906, "Wrong vatlib header installed");
|
static_assert(VAT_LIBVATLIB_VERSION == 907, "Wrong vatlib header installed");
|
||||||
|
|
||||||
using namespace BlackConfig;
|
using namespace BlackConfig;
|
||||||
using namespace BlackMisc;
|
using namespace BlackMisc;
|
||||||
@@ -84,7 +84,7 @@ namespace BlackCore
|
|||||||
CNetworkVatlib::CNetworkVatlib(IOwnAircraftProvider *ownAircraft, QObject *parent)
|
CNetworkVatlib::CNetworkVatlib(IOwnAircraftProvider *ownAircraft, QObject *parent)
|
||||||
: INetwork(parent), COwnAircraftAware(ownAircraft),
|
: INetwork(parent), COwnAircraftAware(ownAircraft),
|
||||||
m_loginMode(LoginNormal),
|
m_loginMode(LoginNormal),
|
||||||
m_status(vatStatusIdle),
|
m_status(vatStatusDisconnected),
|
||||||
m_tokenBucket(10, CTime(5, CTimeUnit::s()), 1)
|
m_tokenBucket(10, CTime(5, CTimeUnit::s()), 1)
|
||||||
{
|
{
|
||||||
connect(this, &CNetworkVatlib::terminate, this, &INetwork::terminateConnection, Qt::QueuedConnection);
|
connect(this, &CNetworkVatlib::terminate, this, &INetwork::terminateConnection, Qt::QueuedConnection);
|
||||||
@@ -132,7 +132,8 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_net.reset(Vat_CreateNetworkSession(serverType, sApp->swiftVersionChar(),
|
m_net.reset(Vat_CreateNetworkSession(serverType, sApp->swiftVersionChar(),
|
||||||
CBuildConfig::getVersion().majorVersion(), CBuildConfig::getVersion().minorVersion(),
|
CBuildConfig::getVersion().majorVersion(),
|
||||||
|
CBuildConfig::getVersion().minorVersion(),
|
||||||
"None", clientId, clientKey.toLocal8Bit().constData(),
|
"None", clientId, clientKey.toLocal8Bit().constData(),
|
||||||
clientCapabilities));
|
clientCapabilities));
|
||||||
|
|
||||||
@@ -149,7 +150,7 @@ namespace BlackCore
|
|||||||
Vat_SetMetarResponseHandler(m_net.data(), onMetarReceived, this);
|
Vat_SetMetarResponseHandler(m_net.data(), onMetarReceived, this);
|
||||||
Vat_SetClientQueryHandler(m_net.data(), onInfoQueryRequestReceived, this);
|
Vat_SetClientQueryHandler(m_net.data(), onInfoQueryRequestReceived, this);
|
||||||
Vat_SetClientQueryResponseHandler(m_net.data(), onInfoQueryReplyReceived, this);
|
Vat_SetClientQueryResponseHandler(m_net.data(), onInfoQueryReplyReceived, this);
|
||||||
Vat_SetInfoCAPSReplyHandler(m_net.data(), onCapabilitiesReplyReceived, this);
|
Vat_SetClientCapabilitiesReplyHandler(m_net.data(), onCapabilitiesReplyReceived, this);
|
||||||
Vat_SetControllerAtisHandler(m_net.data(), onAtisReplyReceived, this);
|
Vat_SetControllerAtisHandler(m_net.data(), onAtisReplyReceived, this);
|
||||||
Vat_SetFlightPlanHandler(m_net.data(), onFlightPlanReceived, this);
|
Vat_SetFlightPlanHandler(m_net.data(), onFlightPlanReceived, this);
|
||||||
Vat_SetServerErrorHandler(m_net.data(), onErrorReceived, this);
|
Vat_SetServerErrorHandler(m_net.data(), onErrorReceived, this);
|
||||||
@@ -248,12 +249,10 @@ namespace BlackCore
|
|||||||
{
|
{
|
||||||
switch (status)
|
switch (status)
|
||||||
{
|
{
|
||||||
case vatStatusIdle: return INetwork::Disconnected;
|
|
||||||
case vatStatusConnecting: return INetwork::Connecting;
|
case vatStatusConnecting: return INetwork::Connecting;
|
||||||
case vatStatusConnected: return INetwork::Connected;
|
case vatStatusConnected: return INetwork::Connected;
|
||||||
case vatStatusDisconnected: return INetwork::Disconnected;
|
case vatStatusDisconnected: return INetwork::Disconnected;
|
||||||
case vatStatusDisconnecting: return INetwork::Disconnecting;
|
case vatStatusDisconnecting: return INetwork::Disconnecting;
|
||||||
case vatStatusError: return INetwork::DisconnectedError;
|
|
||||||
}
|
}
|
||||||
qFatal("unrecognised connection status");
|
qFatal("unrecognised connection status");
|
||||||
return INetwork::DisconnectedError;
|
return INetwork::DisconnectedError;
|
||||||
@@ -372,11 +371,11 @@ namespace BlackCore
|
|||||||
//! \fixme Define recognized simulators somewhere */
|
//! \fixme Define recognized simulators somewhere */
|
||||||
if (simInfo.getSimulator() == "fs9" || simInfo.getSimulator() == "fsx")
|
if (simInfo.getSimulator() == "fs9" || simInfo.getSimulator() == "fsx")
|
||||||
{
|
{
|
||||||
return vatSimTypeMSCFS;
|
return vatSimTypeMSFS95;
|
||||||
}
|
}
|
||||||
else if (simInfo.getSimulator() == "xplane")
|
else if (simInfo.getSimulator() == "xplane")
|
||||||
{
|
{
|
||||||
return vatSimTypeXPLANE;
|
return vatSimTypeXPLANE10;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -795,19 +794,19 @@ namespace BlackCore
|
|||||||
return static_cast<CNetworkVatlib *>(cbvar);
|
return static_cast<CNetworkVatlib *>(cbvar);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onConnectionStatusChanged(VatSessionID, VatConnectionStatus, VatConnectionStatus newStatus, void *cbvar)
|
void CNetworkVatlib::onConnectionStatusChanged(VatFsdClient *, VatConnectionStatus, VatConnectionStatus newStatus, void *cbvar)
|
||||||
{
|
{
|
||||||
cbvar_cast(cbvar)->changeConnectionStatus(newStatus);
|
cbvar_cast(cbvar)->changeConnectionStatus(newStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onTextMessageReceived(VatSessionID, const char *from, const char *to, const char *msg, void *cbvar)
|
void CNetworkVatlib::onTextMessageReceived(VatFsdClient *, const char *from, const char *to, const char *msg, void *cbvar)
|
||||||
{
|
{
|
||||||
CTextMessage tm(cbvar_cast(cbvar)->fromFSD(msg), CCallsign(cbvar_cast(cbvar)->fromFSD(from)), CCallsign(cbvar_cast(cbvar)->fromFSD(to)));
|
CTextMessage tm(cbvar_cast(cbvar)->fromFSD(msg), CCallsign(cbvar_cast(cbvar)->fromFSD(from)), CCallsign(cbvar_cast(cbvar)->fromFSD(to)));
|
||||||
tm.setCurrentUtcTime();
|
tm.setCurrentUtcTime();
|
||||||
cbvar_cast(cbvar)->consolidateTextMessage(tm);
|
cbvar_cast(cbvar)->consolidateTextMessage(tm);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onRadioMessageReceived(VatSessionID, const char *from, int numFreq, int *freqList, const char *msg, void *cbvar)
|
void CNetworkVatlib::onRadioMessageReceived(VatFsdClient *, const char *from, int numFreq, int *freqList, const char *msg, void *cbvar)
|
||||||
{
|
{
|
||||||
auto *self = cbvar_cast(cbvar);
|
auto *self = cbvar_cast(cbvar);
|
||||||
const int com1 = self->getOwnAircraft().getCom1System().getFrequencyActive().valueInteger(CFrequencyUnit::kHz());
|
const int com1 = self->getOwnAircraft().getCom1System().getFrequencyActive().valueInteger(CFrequencyUnit::kHz());
|
||||||
@@ -826,18 +825,18 @@ namespace BlackCore
|
|||||||
emit cbvar_cast(cbvar)->textMessagesReceived(messages);
|
emit cbvar_cast(cbvar)->textMessagesReceived(messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onPilotDisconnected(VatSessionID, const char *callsign, void *cbvar)
|
void CNetworkVatlib::onPilotDisconnected(VatFsdClient *, const char *callsign, void *cbvar)
|
||||||
{
|
{
|
||||||
auto *self = cbvar_cast(cbvar);
|
auto *self = cbvar_cast(cbvar);
|
||||||
emit self->pilotDisconnected(CCallsign(self->fromFSD(callsign), CCallsign::Aircraft));
|
emit self->pilotDisconnected(CCallsign(self->fromFSD(callsign), CCallsign::Aircraft));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onControllerDisconnected(VatSessionID, const char *callsign, void *cbvar)
|
void CNetworkVatlib::onControllerDisconnected(VatFsdClient *, const char *callsign, void *cbvar)
|
||||||
{
|
{
|
||||||
emit cbvar_cast(cbvar)->atcDisconnected(CCallsign(cbvar_cast(cbvar)->fromFSD(callsign), CCallsign::Atc));
|
emit cbvar_cast(cbvar)->atcDisconnected(CCallsign(cbvar_cast(cbvar)->fromFSD(callsign), CCallsign::Atc));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onPilotPositionUpdate(VatSessionID, const char *callsignChar , const VatPilotPosition *position, void *cbvar)
|
void CNetworkVatlib::onPilotPositionUpdate(VatFsdClient *, const char *callsignChar , const VatPilotPosition *position, void *cbvar)
|
||||||
{
|
{
|
||||||
const CCallsign callsign(callsignChar, CCallsign::Aircraft);
|
const CCallsign callsign(callsignChar, CCallsign::Aircraft);
|
||||||
CAircraftSituation situation(
|
CAircraftSituation situation(
|
||||||
@@ -878,7 +877,7 @@ namespace BlackCore
|
|||||||
emit cbvar_cast(cbvar)->aircraftPositionUpdate(situation, transponder);
|
emit cbvar_cast(cbvar)->aircraftPositionUpdate(situation, transponder);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onAircraftConfigReceived(VatSessionID, const char *callsignChar, const char *aircraftConfig, void *cbvar)
|
void CNetworkVatlib::onAircraftConfigReceived(VatFsdClient *, const char *callsignChar, const char *aircraftConfig, void *cbvar)
|
||||||
{
|
{
|
||||||
const QByteArray json = cbvar_cast(cbvar)->fromFSD(aircraftConfig).toUtf8();
|
const QByteArray json = cbvar_cast(cbvar)->fromFSD(aircraftConfig).toUtf8();
|
||||||
QJsonParseError parserError;
|
QJsonParseError parserError;
|
||||||
@@ -905,7 +904,7 @@ namespace BlackCore
|
|||||||
emit self->aircraftConfigPacketReceived(callsign, config, isFull);
|
emit self->aircraftConfigPacketReceived(callsign, config, isFull);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onInterimPilotPositionUpdate(VatSessionID, const char *sender, const VatInterimPilotPosition *position, void *cbvar)
|
void CNetworkVatlib::onInterimPilotPositionUpdate(VatFsdClient *, const char *sender, const VatInterimPilotPosition *position, void *cbvar)
|
||||||
{
|
{
|
||||||
auto *self = cbvar_cast(cbvar);
|
auto *self = cbvar_cast(cbvar);
|
||||||
CAircraftSituation situation(
|
CAircraftSituation situation(
|
||||||
@@ -924,7 +923,7 @@ namespace BlackCore
|
|||||||
emit self->aircraftInterimPositionUpdate(situation);
|
emit self->aircraftInterimPositionUpdate(situation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onAtcPositionUpdate(VatSessionID, const char *callsign, const VatAtcPosition *pos, void *cbvar)
|
void CNetworkVatlib::onAtcPositionUpdate(VatFsdClient *, const char *callsign, const VatAtcPosition *pos, void *cbvar)
|
||||||
{
|
{
|
||||||
const int frequencyKHz = pos->frequency;
|
const int frequencyKHz = pos->frequency;
|
||||||
CFrequency freq(frequencyKHz, CFrequencyUnit::kHz());
|
CFrequency freq(frequencyKHz, CFrequencyUnit::kHz());
|
||||||
@@ -934,17 +933,17 @@ namespace BlackCore
|
|||||||
CCoordinateGeodetic(pos->latitude, pos->longitude, 0), CLength(pos->visibleRange, CLengthUnit::NM()));
|
CCoordinateGeodetic(pos->latitude, pos->longitude, 0), CLength(pos->visibleRange, CLengthUnit::NM()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onKicked(VatSessionID, const char *reason, void *cbvar)
|
void CNetworkVatlib::onKicked(VatFsdClient *, const char *reason, void *cbvar)
|
||||||
{
|
{
|
||||||
emit cbvar_cast(cbvar)->kicked(cbvar_cast(cbvar)->fromFSD(reason));
|
emit cbvar_cast(cbvar)->kicked(cbvar_cast(cbvar)->fromFSD(reason));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onPong(VatSessionID, const char *sender, double elapsedTime, void *cbvar)
|
void CNetworkVatlib::onPong(VatFsdClient *, const char *sender, double elapsedTime, void *cbvar)
|
||||||
{
|
{
|
||||||
emit cbvar_cast(cbvar)->pongReceived(cbvar_cast(cbvar)->fromFSD(sender), CTime(elapsedTime, CTimeUnit::ms()));
|
emit cbvar_cast(cbvar)->pongReceived(cbvar_cast(cbvar)->fromFSD(sender), CTime(elapsedTime, CTimeUnit::ms()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onCustomPacketReceived(VatSessionID, const char *callsign, const char *packetId, const char **data, int dataSize, void *cbvar)
|
void CNetworkVatlib::onCustomPacketReceived(VatFsdClient *, const char *callsign, const char *packetId, const char **data, int dataSize, void *cbvar)
|
||||||
{
|
{
|
||||||
cbvar_cast(cbvar)->customPacketDispatcher(cbvar_cast(cbvar)->fromFSD(callsign), cbvar_cast(cbvar)->fromFSD(packetId), cbvar_cast(cbvar)->fromFSD(data, dataSize));
|
cbvar_cast(cbvar)->customPacketDispatcher(cbvar_cast(cbvar)->fromFSD(callsign), cbvar_cast(cbvar)->fromFSD(packetId), cbvar_cast(cbvar)->fromFSD(data, dataSize));
|
||||||
}
|
}
|
||||||
@@ -1007,13 +1006,13 @@ namespace BlackCore
|
|||||||
m_textMessagesToConsolidate.clear();
|
m_textMessagesToConsolidate.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onMetarReceived(VatSessionID, const char *data, void *cbvar)
|
void CNetworkVatlib::onMetarReceived(VatFsdClient *, const char *data, void *cbvar)
|
||||||
{
|
{
|
||||||
auto *self = cbvar_cast(cbvar);
|
auto *self = cbvar_cast(cbvar);
|
||||||
emit self->metarReplyReceived(self->fromFSD(data));
|
emit self->metarReplyReceived(self->fromFSD(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onInfoQueryRequestReceived(VatSessionID, const char *callsignString, VatClientQueryType type, const char *, void *cbvar)
|
void CNetworkVatlib::onInfoQueryRequestReceived(VatFsdClient *, const char *callsignString, VatClientQueryType type, const char *, void *cbvar)
|
||||||
{
|
{
|
||||||
auto *self = cbvar_cast(cbvar);
|
auto *self = cbvar_cast(cbvar);
|
||||||
const CCallsign callsign(self->fromFSD(callsignString));
|
const CCallsign callsign(self->fromFSD(callsignString));
|
||||||
@@ -1030,7 +1029,7 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onInfoQueryReplyReceived(VatSessionID, const char *callsign, VatClientQueryType type, const char *data, const char *data2, void *cbvar)
|
void CNetworkVatlib::onInfoQueryReplyReceived(VatFsdClient *, const char *callsign, VatClientQueryType type, const char *data, const char *data2, void *cbvar)
|
||||||
{
|
{
|
||||||
auto *self = cbvar_cast(cbvar);
|
auto *self = cbvar_cast(cbvar);
|
||||||
switch (type)
|
switch (type)
|
||||||
@@ -1044,7 +1043,7 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onCapabilitiesReplyReceived(VatSessionID, const char *callsign, int capabilityFlags, void *cbvar)
|
void CNetworkVatlib::onCapabilitiesReplyReceived(VatFsdClient *, const char *callsign, int capabilityFlags, void *cbvar)
|
||||||
{
|
{
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
if (capabilityFlags & vatCapsAtcInfo) { flags |= AcceptsAtisResponses; }
|
if (capabilityFlags & vatCapsAtcInfo) { flags |= AcceptsAtisResponses; }
|
||||||
@@ -1055,7 +1054,7 @@ namespace BlackCore
|
|||||||
emit self->capabilitiesReplyReceived(self->fromFSD(callsign), flags);
|
emit self->capabilitiesReplyReceived(self->fromFSD(callsign), flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onAtisReplyReceived(VatSessionID, const char *callsign, const VatControllerAtis *atis, void *cbvar)
|
void CNetworkVatlib::onAtisReplyReceived(VatFsdClient *, const char *callsign, const VatControllerAtis *atis, void *cbvar)
|
||||||
{
|
{
|
||||||
auto *self = cbvar_cast(cbvar);
|
auto *self = cbvar_cast(cbvar);
|
||||||
emit self->atisVoiceRoomReplyReceived(self->fromFSD(callsign), self->fromFSD(atis->voiceRoom));
|
emit self->atisVoiceRoomReplyReceived(self->fromFSD(callsign), self->fromFSD(atis->voiceRoom));
|
||||||
@@ -1084,7 +1083,7 @@ namespace BlackCore
|
|||||||
emit self->atisReplyReceived(CCallsign(self->fromFSD(callsign), CCallsign::Atc), atisMessage);
|
emit self->atisReplyReceived(CCallsign(self->fromFSD(callsign), CCallsign::Atc), atisMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onFlightPlanReceived(VatSessionID, const char *callsignChar, const VatFlightPlan *fp, void *cbvar)
|
void CNetworkVatlib::onFlightPlanReceived(VatFsdClient *, const char *callsignChar, const VatFlightPlan *fp, void *cbvar)
|
||||||
{
|
{
|
||||||
CFlightPlan::FlightRules rules = CFlightPlan::VFR;
|
CFlightPlan::FlightRules rules = CFlightPlan::VFR;
|
||||||
switch (fp->flightType)
|
switch (fp->flightType)
|
||||||
@@ -1130,7 +1129,7 @@ namespace BlackCore
|
|||||||
emit self->flightPlanReplyReceived(callsign, flightPlan);
|
emit self->flightPlanReplyReceived(callsign, flightPlan);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onErrorReceived(VatSessionID, VatServerError error, const char *msg, const char *data, void *cbvar)
|
void CNetworkVatlib::onErrorReceived(VatFsdClient *, VatServerError error, const char *msg, const char *data, void *cbvar)
|
||||||
{
|
{
|
||||||
auto *self = cbvar_cast(cbvar);
|
auto *self = cbvar_cast(cbvar);
|
||||||
switch (error)
|
switch (error)
|
||||||
@@ -1160,14 +1159,14 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onPilotInfoRequestReceived(VatSessionID, const char *callsignChar, void *cbvar)
|
void CNetworkVatlib::onPilotInfoRequestReceived(VatFsdClient *, const char *callsignChar, void *cbvar)
|
||||||
{
|
{
|
||||||
auto *self = cbvar_cast(cbvar);
|
auto *self = cbvar_cast(cbvar);
|
||||||
const CCallsign callsign(self->fromFSD(callsignChar));
|
const CCallsign callsign(self->fromFSD(callsignChar));
|
||||||
QTimer::singleShot(0, self, [ = ]() { self->sendAircraftInfo(callsign); });
|
QTimer::singleShot(0, self, [ = ]() { self->sendAircraftInfo(callsign); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::onPilotInfoReceived(VatSessionID, const char *callsignChar, const VatAircraftInfo *aircraftInfo, void *cbvar)
|
void CNetworkVatlib::onPilotInfoReceived(VatFsdClient *, const char *callsignChar, const VatAircraftInfo *aircraftInfo, void *cbvar)
|
||||||
{
|
{
|
||||||
auto *self = cbvar_cast(cbvar);
|
auto *self = cbvar_cast(cbvar);
|
||||||
const CCallsign callsign(self->fromFSD(callsignChar), CCallsign::Aircraft);
|
const CCallsign callsign(self->fromFSD(callsignChar), CCallsign::Aircraft);
|
||||||
@@ -1179,9 +1178,13 @@ namespace BlackCore
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNetworkVatlib::networkLogHandler(SeverityLevel /** severity **/, const char *message)
|
void CNetworkVatlib::networkLogHandler(SeverityLevel /** severity **/, const char *context, const char *message)
|
||||||
{
|
{
|
||||||
CLogMessage(static_cast<CNetworkVatlib *>(nullptr)).error(message);
|
QString errorMessage("vatlib ");
|
||||||
|
errorMessage += context;
|
||||||
|
errorMessage += ": ";
|
||||||
|
errorMessage += message;
|
||||||
|
CLogMessage(static_cast<CNetworkVatlib *>(nullptr)).error(errorMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
const QJsonObject &CNetworkVatlib::JsonPackets::aircraftConfigRequest()
|
const QJsonObject &CNetworkVatlib::JsonPackets::aircraftConfigRequest()
|
||||||
|
|||||||
@@ -141,27 +141,27 @@ namespace BlackCore
|
|||||||
|
|
||||||
//! \name Shimlib callbacks
|
//! \name Shimlib callbacks
|
||||||
//! @{
|
//! @{
|
||||||
static void onConnectionStatusChanged(VatSessionID, VatConnectionStatus oldStatus, VatConnectionStatus newStatus, void *cbvar);
|
static void onConnectionStatusChanged(VatFsdClient *, VatConnectionStatus oldStatus, VatConnectionStatus newStatus, void *cbvar);
|
||||||
static void onTextMessageReceived(VatSessionID, const char *from, const char *to, const char *msg, void *cbvar);
|
static void onTextMessageReceived(VatFsdClient *, const char *from, const char *to, const char *msg, void *cbvar);
|
||||||
static void onRadioMessageReceived(VatSessionID, const char *from, int freqCount, int *freqList, const char *message, void *cbvar);
|
static void onRadioMessageReceived(VatFsdClient *, const char *from, int freqCount, int *freqList, const char *message, void *cbvar);
|
||||||
static void onControllerDisconnected(VatSessionID, const char *callsign, void *cbvar);
|
static void onControllerDisconnected(VatFsdClient *, const char *callsign, void *cbvar);
|
||||||
static void onInterimPilotPositionUpdate(VatSessionID, const char *sender, const VatInterimPilotPosition *position, void *cbvar);
|
static void onInterimPilotPositionUpdate(VatFsdClient *, const char *sender, const VatInterimPilotPosition *position, void *cbvar);
|
||||||
static void onAtcPositionUpdate(VatSessionID, const char *callsign, const VatAtcPosition *pos, void *cbvar);
|
static void onAtcPositionUpdate(VatFsdClient *, const char *callsign, const VatAtcPosition *pos, void *cbvar);
|
||||||
static void onKicked(VatSessionID, const char *reason, void *cbvar);
|
static void onKicked(VatFsdClient *, const char *reason, void *cbvar);
|
||||||
static void onPong(VatSessionID, const char *sender, double elapsedTime, void *cbvar);
|
static void onPong(VatFsdClient *, const char *sender, double elapsedTime, void *cbvar);
|
||||||
static void onMetarReceived(VatSessionID, const char *data, void *cbvar);
|
static void onMetarReceived(VatFsdClient *, const char *data, void *cbvar);
|
||||||
static void onInfoQueryRequestReceived(VatSessionID, const char *callsign, VatClientQueryType type, const char *data, void *cbvar);
|
static void onInfoQueryRequestReceived(VatFsdClient *, const char *callsign, VatClientQueryType type, const char *data, void *cbvar);
|
||||||
static void onInfoQueryReplyReceived(VatSessionID, const char *callsign, VatClientQueryType type, const char *data, const char *data2, void *cbvar);
|
static void onInfoQueryReplyReceived(VatFsdClient *, const char *callsign, VatClientQueryType type, const char *data, const char *data2, void *cbvar);
|
||||||
static void onCapabilitiesReplyReceived(VatSessionID, const char *callsign, int capabilityFlags, void *cbvar);
|
static void onCapabilitiesReplyReceived(VatFsdClient *, const char *callsign, int capabilityFlags, void *cbvar);
|
||||||
static void onAtisReplyReceived(VatSessionID, const char *callsign, const VatControllerAtis *atis, void *cbvar);
|
static void onAtisReplyReceived(VatFsdClient *, const char *callsign, const VatControllerAtis *atis, void *cbvar);
|
||||||
static void onFlightPlanReceived(VatSessionID, const char *callsign, const VatFlightPlan *fp, void *cbvar);
|
static void onFlightPlanReceived(VatFsdClient *, const char *callsign, const VatFlightPlan *fp, void *cbvar);
|
||||||
static void onErrorReceived(VatSessionID, VatServerError error, const char *msg, const char *data, void *cbvar);
|
static void onErrorReceived(VatFsdClient *, VatServerError error, const char *msg, const char *data, void *cbvar);
|
||||||
static void onPilotDisconnected(VatSessionID, const char *callsign, void *cbvar);
|
static void onPilotDisconnected(VatFsdClient *, const char *callsign, void *cbvar);
|
||||||
static void onPilotInfoRequestReceived(VatSessionID, const char *callsign, void *cbvar);
|
static void onPilotInfoRequestReceived(VatFsdClient *, const char *callsign, void *cbvar);
|
||||||
static void onPilotInfoReceived(VatSessionID, const char *callsign, const VatAircraftInfo *aircraftInfo, void *cbvar);
|
static void onPilotInfoReceived(VatFsdClient *, const char *callsign, const VatAircraftInfo *aircraftInfo, void *cbvar);
|
||||||
static void onPilotPositionUpdate(VatSessionID, const char *callsign, const VatPilotPosition *position, void *cbvar);
|
static void onPilotPositionUpdate(VatFsdClient *, const char *callsign, const VatPilotPosition *position, void *cbvar);
|
||||||
static void onAircraftConfigReceived(VatSessionID, const char *callsign, const char *aircraftConfig, void *cbvar);
|
static void onAircraftConfigReceived(VatFsdClient *, const char *callsign, const char *aircraftConfig, void *cbvar);
|
||||||
static void onCustomPacketReceived(VatSessionID, const char *callsign, const char *packetId, const char **data, int dataSize, void *cbvar);
|
static void onCustomPacketReceived(VatFsdClient *, const char *callsign, const char *packetId, const char **data, int dataSize, void *cbvar);
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
QByteArray toFSD(const QString &qstr) const;
|
QByteArray toFSD(const QString &qstr) const;
|
||||||
@@ -177,7 +177,7 @@ namespace BlackCore
|
|||||||
bool isDisconnected() const { return m_status != vatStatusConnecting && m_status != vatStatusConnected; }
|
bool isDisconnected() const { return m_status != vatStatusConnecting && m_status != vatStatusConnected; }
|
||||||
static QString convertToUnicodeEscaped(const QString &str);
|
static QString convertToUnicodeEscaped(const QString &str);
|
||||||
static VatSimType convertToSimType(BlackMisc::Simulation::CSimulatorPluginInfo &simInfo);
|
static VatSimType convertToSimType(BlackMisc::Simulation::CSimulatorPluginInfo &simInfo);
|
||||||
static void networkLogHandler(SeverityLevel severity, const char *message);
|
static void networkLogHandler(SeverityLevel severity, const char *context, const char *message);
|
||||||
void sendCustomPacket(const BlackMisc::Aviation::CCallsign &callsign, const QString &packetId, const QStringList &data);
|
void sendCustomPacket(const BlackMisc::Aviation::CCallsign &callsign, const QString &packetId, const QStringList &data);
|
||||||
|
|
||||||
static const QString &defaultModelString()
|
static const QString &defaultModelString()
|
||||||
@@ -208,13 +208,13 @@ namespace BlackCore
|
|||||||
void emitConsolidatedTextMessages();
|
void emitConsolidatedTextMessages();
|
||||||
|
|
||||||
//! Deletion policy for QScopedPointer
|
//! Deletion policy for QScopedPointer
|
||||||
struct VatlibQScopedPointerDeleter
|
struct VatFsdClientDeleter
|
||||||
{
|
{
|
||||||
//! Called by QScopedPointer destructor
|
//! Called by QScopedPointer destructor
|
||||||
static void cleanup(VatSessionID session) { if (session) Vat_DestroyNetworkSession(session); }
|
static void cleanup(VatFsdClient *session) { if (session) Vat_DestroyNetworkSession(session); }
|
||||||
};
|
};
|
||||||
|
|
||||||
QScopedPointer<PCSBClient, VatlibQScopedPointerDeleter> m_net;
|
QScopedPointer<VatFsdClient, VatFsdClientDeleter> m_net;
|
||||||
LoginMode m_loginMode;
|
LoginMode m_loginMode;
|
||||||
VatConnectionStatus m_status;
|
VatConnectionStatus m_status;
|
||||||
BlackMisc::Network::CServer m_server;
|
BlackMisc::Network::CServer m_server;
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
//! \cond PRIVATE
|
//! \cond PRIVATE
|
||||||
|
|
||||||
|
#include "blackcore/application.h"
|
||||||
|
#include "blackcore/context/contextnetwork.h"
|
||||||
#include "blackcore/vatsim/voicechannelvatlib.h"
|
#include "blackcore/vatsim/voicechannelvatlib.h"
|
||||||
#include "blackmisc/logmessage.h"
|
#include "blackmisc/logmessage.h"
|
||||||
#include "blackmisc/statusmessage.h"
|
#include "blackmisc/statusmessage.h"
|
||||||
@@ -20,21 +22,20 @@
|
|||||||
using namespace BlackMisc;
|
using namespace BlackMisc;
|
||||||
using namespace BlackMisc::Audio;
|
using namespace BlackMisc::Audio;
|
||||||
using namespace BlackMisc::Aviation;
|
using namespace BlackMisc::Aviation;
|
||||||
|
using namespace BlackMisc::Network;
|
||||||
|
|
||||||
namespace BlackCore
|
namespace BlackCore
|
||||||
{
|
{
|
||||||
namespace Vatsim
|
namespace Vatsim
|
||||||
{
|
{
|
||||||
CVoiceChannelVatlib::CVoiceChannelVatlib(VatAudioService audioService, VatUDPAudioPort udpPort, QObject *parent)
|
CVoiceChannelVatlib::CVoiceChannelVatlib(VatAudioService *audioService, VatUDPAudioPort *udpPort, QObject *parent)
|
||||||
: IVoiceChannel(parent),
|
: IVoiceChannel(parent)
|
||||||
m_audioService(audioService),
|
|
||||||
m_udpPort(udpPort)
|
|
||||||
{
|
{
|
||||||
m_voiceChannel.reset(Vat_CreateVoiceChannel(m_audioService, "", 3782, "", "", m_udpPort));
|
m_voiceChannel.reset(Vat_CreateVoiceChannel(audioService, "", 3782, "", "", udpPort));
|
||||||
Vat_SetConnectionChangedHandler(m_voiceChannel.data(), roomStatusUpdate, this);
|
Vat_SetConnectionChangedHandler(m_voiceChannel.data(), roomStatusUpdate, this);
|
||||||
Vat_SetClientJoinedHandler(m_voiceChannel.data(), processUserJoined, this);
|
Vat_SetClientJoinedHandler(m_voiceChannel.data(), processUserJoined, this);
|
||||||
Vat_SetClientLeftHandler(m_voiceChannel.data(), processUserLeft, this);
|
Vat_SetClientLeftHandler(m_voiceChannel.data(), processUserLeft, this);
|
||||||
Vat_SetVoiceTransmissionChangedHandler(m_voiceChannel.data(), processTransmissionChange, this);
|
Vat_SetVoiceReceptionHandler(m_voiceChannel.data(), processVoiceReceptionChanged, this);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,6 +48,14 @@ namespace BlackCore
|
|||||||
{
|
{
|
||||||
if (m_roomStatus == IVoiceChannel::Connecting || m_roomStatus == IVoiceChannel::Connected) return;
|
if (m_roomStatus == IVoiceChannel::Connecting || m_roomStatus == IVoiceChannel::Connected) return;
|
||||||
|
|
||||||
|
// Make sure we are connected to a VATSIM FSD
|
||||||
|
CServer::ServerType connectedServerType = sApp->getIContextNetwork()->getConnectedServer().getServerType();
|
||||||
|
if (!sApp->getIContextNetwork()->isConnected() || connectedServerType != CServer::FSDServerVatsim)
|
||||||
|
{
|
||||||
|
CLogMessage(this).warning("Cannot join VATSIM voice channel without active VATSIM FSD connection!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// No one else is using this voice room, so prepare to join
|
// No one else is using this voice room, so prepare to join
|
||||||
m_voiceRoom = voiceRoom;
|
m_voiceRoom = voiceRoom;
|
||||||
Vat_SetRoomInfo(m_voiceChannel.data(), qPrintable(voiceRoom.getHostname()), 3782,
|
Vat_SetRoomInfo(m_voiceChannel.data(), qPrintable(voiceRoom.getHostname()), 3782,
|
||||||
@@ -101,7 +110,7 @@ namespace BlackCore
|
|||||||
return 100;
|
return 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
VatVoiceChannel CVoiceChannelVatlib::getVoiceChannel() const
|
VatVoiceChannel *CVoiceChannelVatlib::getVoiceChannel() const
|
||||||
{
|
{
|
||||||
return m_voiceChannel.data();
|
return m_voiceChannel.data();
|
||||||
}
|
}
|
||||||
@@ -126,27 +135,27 @@ namespace BlackCore
|
|||||||
return callsign;
|
return callsign;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceChannelVatlib::userJoinedVoiceRoom(VatVoiceChannel, int /** id **/, const char *name)
|
void CVoiceChannelVatlib::userJoinedVoiceRoom(VatVoiceChannel *, int /** id **/, const char *name)
|
||||||
{
|
{
|
||||||
CCallsign callsign(extractCallsign(name));
|
CCallsign callsign(extractCallsign(name));
|
||||||
m_listCallsigns.push_back(callsign);
|
m_listCallsigns.push_back(callsign);
|
||||||
emit userJoinedRoom(callsign);
|
emit userJoinedRoom(callsign);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceChannelVatlib::userLeftVoiceRoom(VatVoiceChannel, int /** id **/, const char *name)
|
void CVoiceChannelVatlib::userLeftVoiceRoom(VatVoiceChannel *, int /** id **/, const char *name)
|
||||||
{
|
{
|
||||||
CCallsign callsign(extractCallsign(name));
|
CCallsign callsign(extractCallsign(name));
|
||||||
m_listCallsigns.remove(callsign);
|
m_listCallsigns.remove(callsign);
|
||||||
emit userLeftRoom(callsign);
|
emit userLeftRoom(callsign);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceChannelVatlib::transmissionChanged(VatVoiceChannel, VatVoiceTransmissionStatus status)
|
void CVoiceChannelVatlib::voiceReceptionChanged(VatVoiceChannel *, bool isVoiceReceiving)
|
||||||
{
|
{
|
||||||
if (status == vatVoiceStarted) emit audioStarted();
|
if (isVoiceReceiving) emit audioStarted();
|
||||||
else emit audioStopped();
|
else emit audioStopped();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceChannelVatlib::updateRoomStatus(VatVoiceChannel channel, VatConnectionStatus oldVatStatus, VatConnectionStatus newVatStatus)
|
void CVoiceChannelVatlib::updateRoomStatus(VatVoiceChannel *channel, VatConnectionStatus oldVatStatus, VatConnectionStatus newVatStatus)
|
||||||
{
|
{
|
||||||
Q_UNUSED(channel);
|
Q_UNUSED(channel);
|
||||||
Q_UNUSED(oldVatStatus);
|
Q_UNUSED(oldVatStatus);
|
||||||
@@ -190,25 +199,25 @@ namespace BlackCore
|
|||||||
return static_cast<CVoiceChannelVatlib *>(cbvar);
|
return static_cast<CVoiceChannelVatlib *>(cbvar);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceChannelVatlib::processUserJoined(VatVoiceChannel channel, int id, const char *name, void *cbVar)
|
void CVoiceChannelVatlib::processUserJoined(VatVoiceChannel *channel, int id, const char *name, void *cbVar)
|
||||||
{
|
{
|
||||||
auto obj = cbvar_cast_voiceChannel(cbVar);
|
auto obj = cbvar_cast_voiceChannel(cbVar);
|
||||||
obj->userJoinedVoiceRoom(channel, id, name);
|
obj->userJoinedVoiceRoom(channel, id, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceChannelVatlib::processUserLeft(VatVoiceChannel channel, int id, const char *name, void *cbVar)
|
void CVoiceChannelVatlib::processUserLeft(VatVoiceChannel *channel, int id, const char *name, void *cbVar)
|
||||||
{
|
{
|
||||||
auto obj = cbvar_cast_voiceChannel(cbVar);
|
auto obj = cbvar_cast_voiceChannel(cbVar);
|
||||||
obj->userLeftVoiceRoom(channel, id, name);
|
obj->userLeftVoiceRoom(channel, id, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceChannelVatlib::processTransmissionChange(VatVoiceChannel channel, VatVoiceTransmissionStatus status, void *cbVar)
|
void CVoiceChannelVatlib::processVoiceReceptionChanged(VatVoiceChannel *channel, bool isVoiceReceiving, void *cbVar)
|
||||||
{
|
{
|
||||||
auto obj = cbvar_cast_voiceChannel(cbVar);
|
auto obj = cbvar_cast_voiceChannel(cbVar);
|
||||||
obj->transmissionChanged(channel, status);
|
obj->voiceReceptionChanged(channel, isVoiceReceiving);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceChannelVatlib::roomStatusUpdate(VatVoiceChannel channel, VatConnectionStatus oldStatus, VatConnectionStatus newStatus, void *cbVar)
|
void CVoiceChannelVatlib::roomStatusUpdate(VatVoiceChannel *channel, VatConnectionStatus oldStatus, VatConnectionStatus newStatus, void *cbVar)
|
||||||
{
|
{
|
||||||
auto obj = cbvar_cast_voiceChannel(cbVar);
|
auto obj = cbvar_cast_voiceChannel(cbVar);
|
||||||
obj->updateRoomStatus(channel, oldStatus, newStatus);
|
obj->updateRoomStatus(channel, oldStatus, newStatus);
|
||||||
|
|||||||
@@ -24,8 +24,6 @@
|
|||||||
#include <QScopedPointer>
|
#include <QScopedPointer>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
struct VatProducerConsumer_tag;
|
|
||||||
|
|
||||||
namespace BlackCore
|
namespace BlackCore
|
||||||
{
|
{
|
||||||
namespace Vatsim
|
namespace Vatsim
|
||||||
@@ -40,7 +38,7 @@ namespace BlackCore
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
//! Default constructor
|
//! Default constructor
|
||||||
CVoiceChannelVatlib(VatAudioService audioService, VatUDPAudioPort udpPort, QObject *parent = nullptr);
|
CVoiceChannelVatlib(VatAudioService *audioService, VatUDPAudioPort *udpPort, QObject *parent = nullptr);
|
||||||
|
|
||||||
//! Destructor
|
//! Destructor
|
||||||
virtual ~CVoiceChannelVatlib();
|
virtual ~CVoiceChannelVatlib();
|
||||||
@@ -70,13 +68,13 @@ namespace BlackCore
|
|||||||
virtual int getVolume() const override;
|
virtual int getVolume() const override;
|
||||||
|
|
||||||
//! Get vatlib channel pointer
|
//! Get vatlib channel pointer
|
||||||
VatVoiceChannel getVoiceChannel() const;
|
VatVoiceChannel *getVoiceChannel() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
struct VatVoiceChannelDeleter
|
struct VatVoiceChannelDeleter
|
||||||
{
|
{
|
||||||
static inline void cleanup(VatProducerConsumer_tag *obj)
|
static inline void cleanup(VatVoiceChannel *obj)
|
||||||
{
|
{
|
||||||
if (obj) Vat_DestroyVoiceChannel(obj);
|
if (obj) Vat_DestroyVoiceChannel(obj);
|
||||||
}
|
}
|
||||||
@@ -84,26 +82,23 @@ namespace BlackCore
|
|||||||
|
|
||||||
BlackMisc::Aviation::CCallsign extractCallsign(const QString &name);
|
BlackMisc::Aviation::CCallsign extractCallsign(const QString &name);
|
||||||
|
|
||||||
void userJoinedVoiceRoom(VatVoiceChannel, int id, const char *name);
|
void userJoinedVoiceRoom(VatVoiceChannel *, int id, const char *name);
|
||||||
void userLeftVoiceRoom(VatVoiceChannel, int id, const char *name);
|
void userLeftVoiceRoom(VatVoiceChannel *, int id, const char *name);
|
||||||
void transmissionChanged(VatVoiceChannel, VatVoiceTransmissionStatus status);
|
void voiceReceptionChanged(VatVoiceChannel *, bool isVoiceReceiving);
|
||||||
void updateRoomStatus(VatVoiceChannel channel, VatConnectionStatus oldStatus, VatConnectionStatus newStatus);
|
void updateRoomStatus(VatVoiceChannel *channel, VatConnectionStatus oldStatus, VatConnectionStatus newStatus);
|
||||||
|
|
||||||
static void processUserJoined(VatVoiceChannel channel, int id, const char *name, void *cbVar);
|
static void processUserJoined(VatVoiceChannel *channel, int id, const char *name, void *cbVar);
|
||||||
static void processUserLeft(VatVoiceChannel channel, int id, const char *name, void *cbVar);
|
static void processUserLeft(VatVoiceChannel *channel, int id, const char *name, void *cbVar);
|
||||||
static void processTransmissionChange(VatVoiceChannel channel, VatVoiceTransmissionStatus status, void *cbVar);
|
static void processVoiceReceptionChanged(VatVoiceChannel *channel, bool isVoiceReceiving, void *cbVar);
|
||||||
|
|
||||||
static void roomStatusUpdate(VatVoiceChannel channel, VatConnectionStatus oldStatus, VatConnectionStatus newStatus, void *cbVar);
|
static void roomStatusUpdate(VatVoiceChannel *channel, VatConnectionStatus oldStatus, VatConnectionStatus newStatus, void *cbVar);
|
||||||
|
|
||||||
BlackMisc::Aviation::CCallsign m_callsign; // Own callsign
|
BlackMisc::Aviation::CCallsign m_callsign; // Own callsign
|
||||||
BlackMisc::Audio::CVoiceRoom m_voiceRoom; // Voice Room
|
BlackMisc::Audio::CVoiceRoom m_voiceRoom; // Voice Room
|
||||||
BlackMisc::Aviation::CCallsignSet m_listCallsigns; // Callsigns connected to room
|
BlackMisc::Aviation::CCallsignSet m_listCallsigns; // Callsigns connected to room
|
||||||
IVoiceChannel::ConnectionStatus m_roomStatus = IVoiceChannel::Disconnected; // Room connection status
|
IVoiceChannel::ConnectionStatus m_roomStatus = IVoiceChannel::Disconnected; // Room connection status
|
||||||
|
|
||||||
VatAudioService m_audioService;
|
QScopedPointer<VatVoiceChannel, VatVoiceChannelDeleter> m_voiceChannel;
|
||||||
VatUDPAudioPort m_udpPort;
|
|
||||||
|
|
||||||
QScopedPointer<VatProducerConsumer_tag, VatVoiceChannelDeleter> m_voiceChannel;
|
|
||||||
};
|
};
|
||||||
} // ns
|
} // ns
|
||||||
} // ns
|
} // ns
|
||||||
|
|||||||
@@ -74,7 +74,8 @@ namespace BlackCore
|
|||||||
auto audioMixerVatlib = qobject_cast<CAudioMixerVatlib *>(mixer);
|
auto audioMixerVatlib = qobject_cast<CAudioMixerVatlib *>(mixer);
|
||||||
Q_ASSERT_X(audioMixerVatlib, "CVoiceVatlib::connectVoice", "No valid CAudioMixerVatlib pointer.");
|
Q_ASSERT_X(audioMixerVatlib, "CVoiceVatlib::connectVoice", "No valid CAudioMixerVatlib pointer.");
|
||||||
|
|
||||||
Vat_ConnectProducerToProducerConsumer(audioInputVatlib->getVatLocalInputCodec(), 0, audioMixerVatlib->getVatAudioMixer(), inputPort);
|
Vat_VoiceConnect(VatProducerLocalInput, audioInputVatlib->getVatLocalInputCodec(), 0,
|
||||||
|
VatConsumerAudioMixer, audioMixerVatlib->getVatAudioMixer(), inputPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceVatlib::connectVoice(IVoiceChannel *channel, IAudioMixer *mixer, IAudioMixer::InputPort inputPort)
|
void CVoiceVatlib::connectVoice(IVoiceChannel *channel, IAudioMixer *mixer, IAudioMixer::InputPort inputPort)
|
||||||
@@ -85,7 +86,8 @@ namespace BlackCore
|
|||||||
auto audioMixerVatlib = qobject_cast<CAudioMixerVatlib *>(mixer);
|
auto audioMixerVatlib = qobject_cast<CAudioMixerVatlib *>(mixer);
|
||||||
Q_ASSERT_X(audioMixerVatlib, "CVoiceVatlib::connectVoice", "No valid CAudioMixerVatlib pointer.");
|
Q_ASSERT_X(audioMixerVatlib, "CVoiceVatlib::connectVoice", "No valid CAudioMixerVatlib pointer.");
|
||||||
|
|
||||||
Vat_ConnectProducerConsumerToProducerConsumer(voiceChannelVatlib->getVoiceChannel(), 0, audioMixerVatlib->getVatAudioMixer(), inputPort);
|
Vat_VoiceConnect(VatProducerVoiceChannel, voiceChannelVatlib->getVoiceChannel(), 0,
|
||||||
|
VatConsumerAudioMixer, audioMixerVatlib->getVatAudioMixer(), inputPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceVatlib::connectVoice(IAudioMixer *mixer, IAudioMixer::OutputPort outputPort, IAudioOutputDevice *device)
|
void CVoiceVatlib::connectVoice(IAudioMixer *mixer, IAudioMixer::OutputPort outputPort, IAudioOutputDevice *device)
|
||||||
@@ -96,7 +98,8 @@ namespace BlackCore
|
|||||||
auto audioDeviceVatlib = qobject_cast<CAudioOutputDeviceVatlib *>(device);
|
auto audioDeviceVatlib = qobject_cast<CAudioOutputDeviceVatlib *>(device);
|
||||||
Q_ASSERT_X(audioDeviceVatlib, "CVoiceVatlib::connectVoice", "No valid CAudioOutputDeviceVatlib pointer.");
|
Q_ASSERT_X(audioDeviceVatlib, "CVoiceVatlib::connectVoice", "No valid CAudioOutputDeviceVatlib pointer.");
|
||||||
|
|
||||||
Vat_ConnectProducerConsumerToConsumer(audioMixerVatlib->getVatAudioMixer(), outputPort, audioDeviceVatlib->getVatLocalOutputCodec(), 0);
|
Vat_VoiceConnect(VatProducerAudioMixer, audioMixerVatlib->getVatAudioMixer(), outputPort,
|
||||||
|
VatConsumerLocalOutput, audioDeviceVatlib->getVatLocalOutputCodec(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceVatlib::connectVoice(IAudioMixer *mixer, IAudioMixer::OutputPort outputPort, IVoiceChannel *channel)
|
void CVoiceVatlib::connectVoice(IAudioMixer *mixer, IAudioMixer::OutputPort outputPort, IVoiceChannel *channel)
|
||||||
@@ -107,39 +110,44 @@ namespace BlackCore
|
|||||||
auto voiceChannelVatlib = qobject_cast<CVoiceChannelVatlib *>(channel);
|
auto voiceChannelVatlib = qobject_cast<CVoiceChannelVatlib *>(channel);
|
||||||
Q_ASSERT_X(voiceChannelVatlib, "CVoiceVatlib::connectVoice", "No valid CVoiceChannelVatlib pointer.");
|
Q_ASSERT_X(voiceChannelVatlib, "CVoiceVatlib::connectVoice", "No valid CVoiceChannelVatlib pointer.");
|
||||||
|
|
||||||
Vat_ConnectProducerConsumerToProducerConsumer(audioMixerVatlib->getVatAudioMixer(), outputPort, voiceChannelVatlib->getVoiceChannel(), 0);
|
Vat_VoiceConnect(VatProducerAudioMixer, audioMixerVatlib->getVatAudioMixer(), outputPort,
|
||||||
|
VatConsumerVoiceChannel, voiceChannelVatlib->getVoiceChannel(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceVatlib::disconnectVoice(IAudioInputDevice *device)
|
void CVoiceVatlib::disconnectVoice(IAudioInputDevice *device)
|
||||||
{
|
{
|
||||||
auto audioInputVatlib = qobject_cast<CAudioInputDeviceVatlib *>(device);
|
auto audioInputVatlib = qobject_cast<CAudioInputDeviceVatlib *>(device);
|
||||||
Q_ASSERT_X(audioInputVatlib, "CVoiceVatlib::connectVoice", "No valid CAudioInputDeviceVatlib pointer.");
|
Q_ASSERT_X(audioInputVatlib, "CVoiceVatlib::connectVoice", "No valid CAudioInputDeviceVatlib pointer.");
|
||||||
Vat_ConnectProducerToConsumer(audioInputVatlib->getVatLocalInputCodec(), 0, nullptr, 0);
|
Vat_VoiceConnect(VatProducerLocalInput, audioInputVatlib->getVatLocalInputCodec(), 0, VatConsumerNone, nullptr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceVatlib::disconnectVoice(IVoiceChannel *channel)
|
void CVoiceVatlib::disconnectVoice(IVoiceChannel *channel)
|
||||||
{
|
{
|
||||||
auto voiceChannelVatlib = qobject_cast<CVoiceChannelVatlib *>(channel);
|
auto voiceChannelVatlib = qobject_cast<CVoiceChannelVatlib *>(channel);
|
||||||
Q_ASSERT_X(voiceChannelVatlib, "CVoiceVatlib::connectVoice", "No valid CVoiceChannelVatlib pointer.");
|
Q_ASSERT_X(voiceChannelVatlib, "CVoiceVatlib::connectVoice", "No valid CVoiceChannelVatlib pointer.");
|
||||||
Vat_ConnectProducerConsumerToConsumer(voiceChannelVatlib->getVoiceChannel(), 0, nullptr, 0);
|
Vat_VoiceConnect(VatProducerVoiceChannel, voiceChannelVatlib->getVoiceChannel(), 0, VatConsumerNone, nullptr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceVatlib::disconnectVoice(IAudioMixer *mixer, IAudioMixer::OutputPort outputPort)
|
void CVoiceVatlib::disconnectVoice(IAudioMixer *mixer, IAudioMixer::OutputPort outputPort)
|
||||||
{
|
{
|
||||||
auto audioMixerVatlib = qobject_cast<CAudioMixerVatlib *>(mixer);
|
auto audioMixerVatlib = qobject_cast<CAudioMixerVatlib *>(mixer);
|
||||||
Q_ASSERT_X(audioMixerVatlib, "CVoiceVatlib::connectVoice", "No valid CAudioMixerVatlib pointer.");
|
Q_ASSERT_X(audioMixerVatlib, "CVoiceVatlib::connectVoice", "No valid CAudioMixerVatlib pointer.");
|
||||||
Vat_ConnectProducerConsumerToConsumer(audioMixerVatlib->getVatAudioMixer(), outputPort, nullptr, 0);
|
Vat_VoiceConnect(VatProducerAudioMixer, audioMixerVatlib->getVatAudioMixer(), outputPort, VatConsumerNone, nullptr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceVatlib::timerEvent(QTimerEvent *)
|
void CVoiceVatlib::timerEvent(QTimerEvent *)
|
||||||
{
|
{
|
||||||
Q_ASSERT_X(m_audioService, "CVoiceVatlib", "VatAudioService invalid!");
|
Q_ASSERT_X(m_audioService, "CVoiceVatlib", "VatAudioService invalid!");
|
||||||
Vat_ExecuteTasks(m_audioService.data());
|
Vat_ExecuteVoiceTasks(m_audioService.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVoiceVatlib::voiceLogHandler(SeverityLevel /** severity **/, const char *message)
|
void CVoiceVatlib::voiceLogHandler(SeverityLevel /** severity **/, const char *context, const char *message)
|
||||||
{
|
{
|
||||||
CLogMessage(static_cast<CVoiceVatlib *>(nullptr)).error(message);
|
QString errorMessage ("vatlib ");
|
||||||
|
errorMessage += context;
|
||||||
|
errorMessage += ": ";
|
||||||
|
errorMessage += message;
|
||||||
|
CLogMessage(static_cast<CVoiceVatlib *>(nullptr)).error(errorMessage);
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ namespace BlackCore
|
|||||||
//! this struct calls Vat_DestroyAudioService to delete the pointer
|
//! this struct calls Vat_DestroyAudioService to delete the pointer
|
||||||
struct VatAudioServiceDeleter
|
struct VatAudioServiceDeleter
|
||||||
{
|
{
|
||||||
static inline void cleanup(VatAudioService_tag *obj)
|
static inline void cleanup(VatAudioService *obj)
|
||||||
{
|
{
|
||||||
Vat_DestroyAudioService(obj);
|
Vat_DestroyAudioService(obj);
|
||||||
}
|
}
|
||||||
@@ -108,16 +108,16 @@ namespace BlackCore
|
|||||||
//! this struct calls Vat_DestroyUDPAudioPort to delete the pointer
|
//! this struct calls Vat_DestroyUDPAudioPort to delete the pointer
|
||||||
struct VatUDPAudioPortDeleter
|
struct VatUDPAudioPortDeleter
|
||||||
{
|
{
|
||||||
static inline void cleanup(VatUDPAudioPort_tag *obj)
|
static inline void cleanup(VatUDPAudioPort *obj)
|
||||||
{
|
{
|
||||||
Vat_DestroyUDPAudioPort(obj);
|
Vat_DestroyUDPAudioPort(obj);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static void voiceLogHandler(SeverityLevel severity, const char *message);
|
static void voiceLogHandler(SeverityLevel severity, const char *context, const char *message);
|
||||||
|
|
||||||
QScopedPointer<VatAudioService_tag, VatAudioServiceDeleter> m_audioService;
|
QScopedPointer<VatAudioService, VatAudioServiceDeleter> m_audioService;
|
||||||
QScopedPointer<VatUDPAudioPort_tag, VatUDPAudioPortDeleter> m_udpPort;
|
QScopedPointer<VatUDPAudioPort, VatUDPAudioPortDeleter> m_udpPort;
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
Reference in New Issue
Block a user