mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-13 15:45:42 +08:00
@@ -21,8 +21,7 @@ Client::Client(QObject *parent) :
|
|||||||
using namespace BlackCore;
|
using namespace BlackCore;
|
||||||
connect(m_voiceClient, &IVoice::squelchTestFinished, this, &Client::onSquelchTestFinished);
|
connect(m_voiceClient, &IVoice::squelchTestFinished, this, &Client::onSquelchTestFinished);
|
||||||
connect(m_voiceClient, &IVoice::micTestFinished, this, &Client::onMicTestFinished);
|
connect(m_voiceClient, &IVoice::micTestFinished, this, &Client::onMicTestFinished);
|
||||||
connect(m_voiceClient, &IVoice::connected, this, &Client::connectionStatusConnected);
|
connect(m_voiceClient, &IVoice::connectionStatusChanged, this, &Client::connectionStatusChanged);
|
||||||
connect(m_voiceClient, &IVoice::disconnected, this, &Client::connectionStatusDisconnected);
|
|
||||||
connect(m_voiceClient, &IVoice::audioStarted, this, &Client::audioStartedStream);
|
connect(m_voiceClient, &IVoice::audioStarted, this, &Client::audioStartedStream);
|
||||||
connect(m_voiceClient, &IVoice::audioStopped, this, &Client::audioStoppedStream);
|
connect(m_voiceClient, &IVoice::audioStopped, this, &Client::audioStoppedStream);
|
||||||
connect(m_voiceClient, &IVoice::userJoinedRoom, this, &Client::userJoinedRoom);
|
connect(m_voiceClient, &IVoice::userJoinedRoom, this, &Client::userJoinedRoom);
|
||||||
@@ -179,15 +178,31 @@ void Client::onMicTestFinished()
|
|||||||
printLinePrefix();
|
printLinePrefix();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::connectionStatusConnected(const BlackCore::IVoice::ComUnit /** comUnit **/)
|
void Client::connectionStatusChanged(BlackCore::IVoice::ComUnit /** comUnit **/,
|
||||||
|
BlackCore::IVoice::ConnectionStatus /** oldStatus **/,
|
||||||
|
BlackCore::IVoice::ConnectionStatus newStatus)
|
||||||
{
|
{
|
||||||
std::cout << "CONN_STATUS_CONNECTED" << std::endl;
|
switch (newStatus)
|
||||||
printLinePrefix();
|
{
|
||||||
}
|
case BlackCore::IVoice::Disconnected:
|
||||||
|
std::cout << "CONN_STATUS_DISCONNECTED" << std::endl;
|
||||||
void Client::connectionStatusDisconnected()
|
break;
|
||||||
{
|
case BlackCore::IVoice::Disconnecting:
|
||||||
std::cout << "CONN_STATUS_DISCONNECTED" << std::endl;
|
std::cout << "CONN_STATUS_DISCONNECTING" << std::endl;
|
||||||
|
break;
|
||||||
|
case BlackCore::IVoice::DisconnectedError:
|
||||||
|
std::cout << "CONN_STATUS_DISCONNECTED_ERROR" << std::endl;
|
||||||
|
break;
|
||||||
|
case BlackCore::IVoice::Connecting:
|
||||||
|
std::cout << "CONN_STATUS_CONNECTING" << std::endl;
|
||||||
|
break;
|
||||||
|
case BlackCore::IVoice::Connected:
|
||||||
|
std::cout << "CONN_STATUS_CONNECTED" << std::endl;
|
||||||
|
break;
|
||||||
|
case BlackCore::IVoice::ConnectingFailed:
|
||||||
|
std::cout << "CONN_STATUS_CONNECTING_FAILED" << std::endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
printLinePrefix();
|
printLinePrefix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,8 +45,9 @@ public slots:
|
|||||||
void onMicTestFinished();
|
void onMicTestFinished();
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
void connectionStatusConnected(const BlackCore::IVoice::ComUnit comUnit);
|
void connectionStatusChanged(BlackCore::IVoice::ComUnit comUnit,
|
||||||
void connectionStatusDisconnected();
|
BlackCore::IVoice::ConnectionStatus oldStatus,
|
||||||
|
BlackCore::IVoice::ConnectionStatus newStatus);
|
||||||
void audioStartedStream(const BlackCore::IVoice::ComUnit comUnit);
|
void audioStartedStream(const BlackCore::IVoice::ComUnit comUnit);
|
||||||
void audioStoppedStream(const BlackCore::IVoice::ComUnit comUnit);
|
void audioStoppedStream(const BlackCore::IVoice::ComUnit comUnit);
|
||||||
void userJoinedRoom(const BlackMisc::Aviation::CCallsign &callsign);
|
void userJoinedRoom(const BlackMisc::Aviation::CCallsign &callsign);
|
||||||
|
|||||||
@@ -57,6 +57,17 @@ namespace BlackCore
|
|||||||
COM2 /*!< ComUnit 2 */
|
COM2 /*!< ComUnit 2 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//! Com status
|
||||||
|
enum ConnectionStatus
|
||||||
|
{
|
||||||
|
Disconnected = 0, //!< Not connected
|
||||||
|
Disconnecting, //!< In transition to disconnected
|
||||||
|
DisconnectedError, //!< Disconnected due to socket error
|
||||||
|
Connecting, //!< Connection initiated but not established
|
||||||
|
Connected, //!< Connection established
|
||||||
|
ConnectingFailed, //!< Failed to connect
|
||||||
|
};
|
||||||
|
|
||||||
//! Virtual destructor.
|
//! Virtual destructor.
|
||||||
virtual ~IVoice() {}
|
virtual ~IVoice() {}
|
||||||
|
|
||||||
@@ -201,14 +212,9 @@ namespace BlackCore
|
|||||||
virtual void switchAudioOutput(const ComUnit comUnit, bool enable) = 0;
|
virtual void switchAudioOutput(const ComUnit comUnit, bool enable) = 0;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
// Signals regarding the voice server connection
|
|
||||||
void notConnected(const ComUnit comUnit);
|
//! The status of a room has changed.
|
||||||
void connecting(const ComUnit comUnit);
|
void connectionStatusChanged(ComUnit comUnit, ConnectionStatus oldStatus, ConnectionStatus newStatus);
|
||||||
void connected(const ComUnit comUnit);
|
|
||||||
void connectionFailed(const ComUnit comUnit);
|
|
||||||
void kicked(const ComUnit comUnit);
|
|
||||||
void disconnecting(const ComUnit comUnit);
|
|
||||||
void disconnected(const ComUnit comUnit);
|
|
||||||
|
|
||||||
// Signals about users joining and leaving
|
// Signals about users joining and leaving
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ namespace BlackCore
|
|||||||
// setOutputDevice(defaultAudioOutputDevice());
|
// setOutputDevice(defaultAudioOutputDevice());
|
||||||
|
|
||||||
connect(this, &CVoiceVatlib::userJoinedLeft, this, &CVoiceVatlib::onUserJoinedLeft, Qt::QueuedConnection);
|
connect(this, &CVoiceVatlib::userJoinedLeft, this, &CVoiceVatlib::onUserJoinedLeft, Qt::QueuedConnection);
|
||||||
connect(this, &CVoiceVatlib::connected, this, &CVoiceVatlib::onUserJoinedLeft, Qt::QueuedConnection);
|
|
||||||
|
|
||||||
this->m_voiceRooms.push_back(CVoiceRoom()); // COM1
|
this->m_voiceRooms.push_back(CVoiceRoom()); // COM1
|
||||||
this->m_voiceRooms.push_back(CVoiceRoom()); // COM2
|
this->m_voiceRooms.push_back(CVoiceRoom()); // COM2
|
||||||
@@ -336,6 +335,7 @@ namespace BlackCore
|
|||||||
vr = voiceRoom;
|
vr = voiceRoom;
|
||||||
vr.setConnected(true);
|
vr.setConnected(true);
|
||||||
this->setVoiceRoomForUnit(comUnit, vr);
|
this->setVoiceRoomForUnit(comUnit, vr);
|
||||||
|
changeConnectionStatus(comUnit, Connecting);
|
||||||
QString serverSpec = voiceRoom.getVoiceRoomUrl();
|
QString serverSpec = voiceRoom.getVoiceRoomUrl();
|
||||||
m_voice->JoinRoom(static_cast<qint32>(comUnit), m_aircraftCallsign.toQString().toLatin1().constData(), serverSpec.toLatin1().constData());
|
m_voice->JoinRoom(static_cast<qint32>(comUnit), m_aircraftCallsign.toQString().toLatin1().constData(), serverSpec.toLatin1().constData());
|
||||||
}
|
}
|
||||||
@@ -361,6 +361,7 @@ namespace BlackCore
|
|||||||
m_voice->LeaveRoom(static_cast<qint32>(comUnit));
|
m_voice->LeaveRoom(static_cast<qint32>(comUnit));
|
||||||
vr.setConnected(false);
|
vr.setConnected(false);
|
||||||
this->setVoiceRoomForUnit(comUnit, vr);
|
this->setVoiceRoomForUnit(comUnit, vr);
|
||||||
|
changeConnectionStatus(comUnit, Disconnecting);
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
@@ -443,21 +444,21 @@ namespace BlackCore
|
|||||||
switchAudioOutput(comUnit, this->m_outputEnabled[comUnit]);
|
switchAudioOutput(comUnit, this->m_outputEnabled[comUnit]);
|
||||||
vr.setConnected(true);
|
vr.setConnected(true);
|
||||||
this->setVoiceRoomForUnit(comUnit, vr);
|
this->setVoiceRoomForUnit(comUnit, vr);
|
||||||
emit connected(comUnit);
|
changeConnectionStatus(comUnit, Connected);
|
||||||
|
emit userJoinedLeft(comUnit);
|
||||||
break;
|
break;
|
||||||
case Cvatlib_Voice_Simple::roomStatusUpdate_JoinFail:
|
case Cvatlib_Voice_Simple::roomStatusUpdate_JoinFail:
|
||||||
vr.setConnected(false);
|
vr.setConnected(false);
|
||||||
this->setVoiceRoomForUnit(comUnit, vr);
|
this->setVoiceRoomForUnit(comUnit, vr);
|
||||||
emit connectionFailed(comUnit);
|
changeConnectionStatus(comUnit, ConnectingFailed);
|
||||||
break;
|
break;
|
||||||
case Cvatlib_Voice_Simple::roomStatusUpdate_UnexpectedDisconnectOrKicked:
|
case Cvatlib_Voice_Simple::roomStatusUpdate_UnexpectedDisconnectOrKicked:
|
||||||
vr.setConnected(false);
|
vr.setConnected(false);
|
||||||
this->setVoiceRoomForUnit(comUnit, vr);
|
this->setVoiceRoomForUnit(comUnit, vr);
|
||||||
emit kicked(comUnit);
|
changeConnectionStatus(comUnit, DisconnectedError);
|
||||||
break;
|
break;
|
||||||
case Cvatlib_Voice_Simple::roomStatusUpdate_LeaveComplete:
|
case Cvatlib_Voice_Simple::roomStatusUpdate_LeaveComplete:
|
||||||
m_voiceRoomCallsigns.clear();
|
m_voiceRoomCallsigns.clear();
|
||||||
emit disconnected(comUnit);
|
|
||||||
break;
|
break;
|
||||||
case Cvatlib_Voice_Simple::roomStatusUpdate_UserJoinsLeaves:
|
case Cvatlib_Voice_Simple::roomStatusUpdate_UserJoinsLeaves:
|
||||||
// FIXME: We cannot call GetRoomUserList because vatlib is not reentrent safe.
|
// FIXME: We cannot call GetRoomUserList because vatlib is not reentrent safe.
|
||||||
@@ -717,4 +718,15 @@ namespace BlackCore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Change voice room status and emit signal
|
||||||
|
void CVoiceVatlib::changeConnectionStatus(ComUnit comUnit, ConnectionStatus newStatus)
|
||||||
|
{
|
||||||
|
ConnectionStatus currentStatus = m_connectionStatus.value(comUnit);
|
||||||
|
if (newStatus != currentStatus)
|
||||||
|
{
|
||||||
|
m_connectionStatus.insert(comUnit, newStatus);
|
||||||
|
emit connectionStatusChanged(comUnit, currentStatus, newStatus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
@@ -196,6 +196,7 @@ namespace BlackCore
|
|||||||
void exceptionDispatcher(const char *caller);
|
void exceptionDispatcher(const char *caller);
|
||||||
void enableAudio(const ComUnit comUnit);
|
void enableAudio(const ComUnit comUnit);
|
||||||
void handlePushToTalk();
|
void handlePushToTalk();
|
||||||
|
void changeConnectionStatus(ComUnit comUnit, ConnectionStatus newStatus);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Deleter
|
* \brief Deleter
|
||||||
@@ -289,6 +290,7 @@ namespace BlackCore
|
|||||||
QMap <ComUnit, BlackMisc::Aviation::CCallsignList> m_voiceRoomCallsigns; /*!< voice room callsigns */
|
QMap <ComUnit, BlackMisc::Aviation::CCallsignList> m_voiceRoomCallsigns; /*!< voice room callsigns */
|
||||||
BlackMisc::Aviation::CCallsignList m_temporaryVoiceRoomCallsigns; /*!< temp. storage of voice rooms during update */
|
BlackMisc::Aviation::CCallsignList m_temporaryVoiceRoomCallsigns; /*!< temp. storage of voice rooms during update */
|
||||||
QMap<ComUnit, bool> m_outputEnabled; /*!< output enabled, basically a mute flag */
|
QMap<ComUnit, bool> m_outputEnabled; /*!< output enabled, basically a mute flag */
|
||||||
|
QMap<ComUnit, ConnectionStatus> m_connectionStatus; /*!< holds connection status for each com unit */
|
||||||
|
|
||||||
// Need to keep the roomIndex?
|
// Need to keep the roomIndex?
|
||||||
// KB: I would remove this approach, it is potentially unsafe
|
// KB: I would remove this approach, it is potentially unsafe
|
||||||
|
|||||||
Reference in New Issue
Block a user