Merge branch 'feature/105_voice_single_status_changed'

fixes #105
This commit is contained in:
Roland Winklmeier
2014-02-10 20:12:29 +01:00
5 changed files with 61 additions and 25 deletions

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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
/*!

View File

@@ -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

View File

@@ -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