mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-31 21:15:33 +08:00
@@ -21,8 +21,7 @@ Client::Client(QObject *parent) :
|
||||
using namespace BlackCore;
|
||||
connect(m_voiceClient, &IVoice::squelchTestFinished, this, &Client::onSquelchTestFinished);
|
||||
connect(m_voiceClient, &IVoice::micTestFinished, this, &Client::onMicTestFinished);
|
||||
connect(m_voiceClient, &IVoice::connected, this, &Client::connectionStatusConnected);
|
||||
connect(m_voiceClient, &IVoice::disconnected, this, &Client::connectionStatusDisconnected);
|
||||
connect(m_voiceClient, &IVoice::connectionStatusChanged, this, &Client::connectionStatusChanged);
|
||||
connect(m_voiceClient, &IVoice::audioStarted, this, &Client::audioStartedStream);
|
||||
connect(m_voiceClient, &IVoice::audioStopped, this, &Client::audioStoppedStream);
|
||||
connect(m_voiceClient, &IVoice::userJoinedRoom, this, &Client::userJoinedRoom);
|
||||
@@ -179,15 +178,31 @@ void Client::onMicTestFinished()
|
||||
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;
|
||||
printLinePrefix();
|
||||
}
|
||||
|
||||
void Client::connectionStatusDisconnected()
|
||||
{
|
||||
std::cout << "CONN_STATUS_DISCONNECTED" << std::endl;
|
||||
switch (newStatus)
|
||||
{
|
||||
case BlackCore::IVoice::Disconnected:
|
||||
std::cout << "CONN_STATUS_DISCONNECTED" << std::endl;
|
||||
break;
|
||||
case BlackCore::IVoice::Disconnecting:
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
@@ -45,8 +45,9 @@ public slots:
|
||||
void onMicTestFinished();
|
||||
private slots:
|
||||
|
||||
void connectionStatusConnected(const BlackCore::IVoice::ComUnit comUnit);
|
||||
void connectionStatusDisconnected();
|
||||
void connectionStatusChanged(BlackCore::IVoice::ComUnit comUnit,
|
||||
BlackCore::IVoice::ConnectionStatus oldStatus,
|
||||
BlackCore::IVoice::ConnectionStatus newStatus);
|
||||
void audioStartedStream(const BlackCore::IVoice::ComUnit comUnit);
|
||||
void audioStoppedStream(const BlackCore::IVoice::ComUnit comUnit);
|
||||
void userJoinedRoom(const BlackMisc::Aviation::CCallsign &callsign);
|
||||
|
||||
@@ -57,6 +57,17 @@ namespace BlackCore
|
||||
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 ~IVoice() {}
|
||||
|
||||
@@ -201,14 +212,9 @@ namespace BlackCore
|
||||
virtual void switchAudioOutput(const ComUnit comUnit, bool enable) = 0;
|
||||
|
||||
signals:
|
||||
// Signals regarding the voice server connection
|
||||
void notConnected(const ComUnit comUnit);
|
||||
void connecting(const ComUnit comUnit);
|
||||
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);
|
||||
|
||||
//! The status of a room has changed.
|
||||
void connectionStatusChanged(ComUnit comUnit, ConnectionStatus oldStatus, ConnectionStatus newStatus);
|
||||
|
||||
// Signals about users joining and leaving
|
||||
/*!
|
||||
|
||||
@@ -38,7 +38,6 @@ namespace BlackCore
|
||||
// setOutputDevice(defaultAudioOutputDevice());
|
||||
|
||||
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()); // COM2
|
||||
@@ -336,6 +335,7 @@ namespace BlackCore
|
||||
vr = voiceRoom;
|
||||
vr.setConnected(true);
|
||||
this->setVoiceRoomForUnit(comUnit, vr);
|
||||
changeConnectionStatus(comUnit, Connecting);
|
||||
QString serverSpec = voiceRoom.getVoiceRoomUrl();
|
||||
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));
|
||||
vr.setConnected(false);
|
||||
this->setVoiceRoomForUnit(comUnit, vr);
|
||||
changeConnectionStatus(comUnit, Disconnecting);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
@@ -443,21 +444,21 @@ namespace BlackCore
|
||||
switchAudioOutput(comUnit, this->m_outputEnabled[comUnit]);
|
||||
vr.setConnected(true);
|
||||
this->setVoiceRoomForUnit(comUnit, vr);
|
||||
emit connected(comUnit);
|
||||
changeConnectionStatus(comUnit, Connected);
|
||||
emit userJoinedLeft(comUnit);
|
||||
break;
|
||||
case Cvatlib_Voice_Simple::roomStatusUpdate_JoinFail:
|
||||
vr.setConnected(false);
|
||||
this->setVoiceRoomForUnit(comUnit, vr);
|
||||
emit connectionFailed(comUnit);
|
||||
changeConnectionStatus(comUnit, ConnectingFailed);
|
||||
break;
|
||||
case Cvatlib_Voice_Simple::roomStatusUpdate_UnexpectedDisconnectOrKicked:
|
||||
vr.setConnected(false);
|
||||
this->setVoiceRoomForUnit(comUnit, vr);
|
||||
emit kicked(comUnit);
|
||||
changeConnectionStatus(comUnit, DisconnectedError);
|
||||
break;
|
||||
case Cvatlib_Voice_Simple::roomStatusUpdate_LeaveComplete:
|
||||
m_voiceRoomCallsigns.clear();
|
||||
emit disconnected(comUnit);
|
||||
break;
|
||||
case Cvatlib_Voice_Simple::roomStatusUpdate_UserJoinsLeaves:
|
||||
// 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
|
||||
|
||||
@@ -196,6 +196,7 @@ namespace BlackCore
|
||||
void exceptionDispatcher(const char *caller);
|
||||
void enableAudio(const ComUnit comUnit);
|
||||
void handlePushToTalk();
|
||||
void changeConnectionStatus(ComUnit comUnit, ConnectionStatus newStatus);
|
||||
|
||||
/*!
|
||||
* \brief Deleter
|
||||
@@ -289,6 +290,7 @@ namespace BlackCore
|
||||
QMap <ComUnit, BlackMisc::Aviation::CCallsignList> m_voiceRoomCallsigns; /*!< voice room callsigns */
|
||||
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, ConnectionStatus> m_connectionStatus; /*!< holds connection status for each com unit */
|
||||
|
||||
// Need to keep the roomIndex?
|
||||
// KB: I would remove this approach, it is potentially unsafe
|
||||
|
||||
Reference in New Issue
Block a user