mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-18 19:35:33 +08:00
* fixed Disconnected status * room connected checking low-level, not on objects (fail safe) * Remark: Still containing debug information for refs #255 , will be removed
This commit is contained in:
@@ -186,11 +186,10 @@ namespace BlackCore
|
|||||||
{
|
{
|
||||||
QReadLocker lockForReading(&m_lockVoiceRooms);
|
QReadLocker lockForReading(&m_lockVoiceRooms);
|
||||||
Q_ASSERT_X(m_voiceRooms.size() == 2, "CVoiceVatlib", "Wrong numer of COM voice rooms");
|
Q_ASSERT_X(m_voiceRooms.size() == 2, "CVoiceVatlib", "Wrong numer of COM voice rooms");
|
||||||
CVoiceRoomList voiceRooms;
|
|
||||||
|
if (!m_voice->IsValid() || !m_voice->IsSetup()) return CVoiceRoomList::twoEmptyRooms();
|
||||||
|
|
||||||
QMutexLocker lockerVatlib(&m_mutexVatlib);
|
QMutexLocker lockerVatlib(&m_mutexVatlib);
|
||||||
if (m_voice->IsValid() && m_voice->IsSetup())
|
|
||||||
{
|
|
||||||
// valid state, update
|
// valid state, update
|
||||||
CVoiceRoom com1 = this->m_voiceRooms[0];
|
CVoiceRoom com1 = this->m_voiceRooms[0];
|
||||||
CVoiceRoom com2 = this->m_voiceRooms[1];
|
CVoiceRoom com2 = this->m_voiceRooms[1];
|
||||||
@@ -198,15 +197,9 @@ namespace BlackCore
|
|||||||
com2.setConnected(m_voice->IsRoomConnected(static_cast<qint32>(COM2)));
|
com2.setConnected(m_voice->IsRoomConnected(static_cast<qint32>(COM2)));
|
||||||
com1.setAudioPlaying(com1.isConnected() ? m_voice->IsAudioPlaying(static_cast<qint32>(COM1)) : false);
|
com1.setAudioPlaying(com1.isConnected() ? m_voice->IsAudioPlaying(static_cast<qint32>(COM1)) : false);
|
||||||
com2.setAudioPlaying(com2.isConnected() ? m_voice->IsAudioPlaying(static_cast<qint32>(COM2)) : false);
|
com2.setAudioPlaying(com2.isConnected() ? m_voice->IsAudioPlaying(static_cast<qint32>(COM2)) : false);
|
||||||
|
CVoiceRoomList voiceRooms;
|
||||||
voiceRooms.push_back(com1);
|
voiceRooms.push_back(com1);
|
||||||
voiceRooms.push_back(com2);
|
voiceRooms.push_back(com2);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CVoiceRoom def;
|
|
||||||
voiceRooms.push_back(def);
|
|
||||||
voiceRooms.push_back(def);
|
|
||||||
}
|
|
||||||
return voiceRooms;
|
return voiceRooms;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -378,16 +371,22 @@ namespace BlackCore
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
CVoiceRoom vr = this->voiceRoomForUnit(comUnit);
|
// only connect, if not yet connected
|
||||||
if (vr.isConnected()) return; // already joined
|
if (this->m_voice->IsRoomConnected(static_cast<qint32>(comUnit))) return;
|
||||||
vr = voiceRoom;
|
|
||||||
// do not(!) set as connected right now, this will be done in status changed
|
|
||||||
// when room really is connected
|
|
||||||
this->setVoiceRoomForUnit(comUnit, vr);
|
|
||||||
changeConnectionStatus(comUnit, Connecting);
|
changeConnectionStatus(comUnit, Connecting);
|
||||||
QString serverSpec = voiceRoom.getVoiceRoomUrl();
|
QString serverSpec = voiceRoom.getVoiceRoomUrl();
|
||||||
QReadLocker lockForReading(&m_lockMyCallsign);
|
QReadLocker lockForReading(&m_lockMyCallsign);
|
||||||
m_voice->JoinRoom(static_cast<qint32>(comUnit), m_aircraftCallsign.toQString().toLatin1().constData(), serverSpec.toLatin1().constData());
|
bool jr = m_voice->JoinRoom(static_cast<qint32>(comUnit), m_aircraftCallsign.toQString().toLatin1().constData(), serverSpec.toLatin1().constData());
|
||||||
|
if (jr)
|
||||||
|
{
|
||||||
|
// do not(!) set as connected right now, this will be done in "status changed"
|
||||||
|
// when room really is connected
|
||||||
|
this->setVoiceRoomForUnit(comUnit, voiceRoom);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qWarning("Could not join voice room");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
@@ -400,8 +399,6 @@ namespace BlackCore
|
|||||||
*/
|
*/
|
||||||
void CVoiceVatlib::leaveVoiceRoom(const ComUnit comUnit)
|
void CVoiceVatlib::leaveVoiceRoom(const ComUnit comUnit)
|
||||||
{
|
{
|
||||||
CVoiceRoom vr = this->voiceRoomForUnit(comUnit);
|
|
||||||
if (!vr.isConnected()) return;
|
|
||||||
QMutexLocker lockerVatlib(&m_mutexVatlib);
|
QMutexLocker lockerVatlib(&m_mutexVatlib);
|
||||||
|
|
||||||
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
|
Q_ASSERT_X(m_voice->IsValid() && m_voice->IsSetup(), "CVoiceVatlib", "Cvatlib_Voice_Simple invalid or not setup!");
|
||||||
@@ -409,11 +406,17 @@ namespace BlackCore
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// update "meta" object for room
|
||||||
this->setVoiceRoomForUnit(comUnit, CVoiceRoom()); // an empty voice room is easier to detect
|
this->setVoiceRoomForUnit(comUnit, CVoiceRoom()); // an empty voice room is easier to detect
|
||||||
|
|
||||||
|
// only leave is room is physically connected
|
||||||
|
if (this->m_voice->IsRoomConnected(static_cast<qint32>(comUnit)))
|
||||||
|
{
|
||||||
m_voice->LeaveRoom(static_cast<qint32>(comUnit));
|
m_voice->LeaveRoom(static_cast<qint32>(comUnit));
|
||||||
this->m_voiceRoomCallsigns[comUnit] = CCallsignList(); // empty list for this room
|
this->m_voiceRoomCallsigns[comUnit] = CCallsignList(); // empty list for this room
|
||||||
changeConnectionStatus(comUnit, Disconnecting);
|
changeConnectionStatus(comUnit, Disconnecting);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (...)
|
catch (...)
|
||||||
{
|
{
|
||||||
this->exceptionDispatcher(Q_FUNC_INFO);
|
this->exceptionDispatcher(Q_FUNC_INFO);
|
||||||
@@ -490,6 +493,7 @@ namespace BlackCore
|
|||||||
*/
|
*/
|
||||||
void CVoiceVatlib::changeRoomStatus(ComUnit comUnit, Cvatlib_Voice_Simple::roomStatusUpdate roomStatus)
|
void CVoiceVatlib::changeRoomStatus(ComUnit comUnit, Cvatlib_Voice_Simple::roomStatusUpdate roomStatus)
|
||||||
{
|
{
|
||||||
|
qDebug() << comUnit << roomStatus; // KB_REMOVE
|
||||||
CVoiceRoom vr = this->voiceRoomForUnit(comUnit);
|
CVoiceRoom vr = this->voiceRoomForUnit(comUnit);
|
||||||
switch (roomStatus)
|
switch (roomStatus)
|
||||||
{
|
{
|
||||||
@@ -519,6 +523,7 @@ namespace BlackCore
|
|||||||
m_lockCallsigns.lockForWrite();
|
m_lockCallsigns.lockForWrite();
|
||||||
m_voiceRoomCallsigns.clear();
|
m_voiceRoomCallsigns.clear();
|
||||||
m_lockCallsigns.unlock();
|
m_lockCallsigns.unlock();
|
||||||
|
changeConnectionStatus(comUnit, Disconnected);
|
||||||
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.
|
||||||
@@ -608,7 +613,8 @@ namespace BlackCore
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Paranoia... clear list completely
|
// Paranoia... clear list completely
|
||||||
if (!m_voice->IsRoomConnected(static_cast<qint32>(comUnit))) {
|
if (!m_voice->IsRoomConnected(static_cast<qint32>(comUnit)))
|
||||||
|
{
|
||||||
this->m_voiceRoomCallsigns[comUnit] = CCallsignList();
|
this->m_voiceRoomCallsigns[comUnit] = CCallsignList();
|
||||||
this->m_temporaryVoiceRoomCallsigns.clear();
|
this->m_temporaryVoiceRoomCallsigns.clear();
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user