show error message in main window if audio delay is too long
This commit is contained in:
parent
897da0c6bd
commit
aeb9512deb
2 changed files with 903 additions and 858 deletions
|
@ -34,6 +34,7 @@ CLlconClientDlg::CLlconClientDlg ( CClient* pNCliP,
|
||||||
pClient ( pNCliP ),
|
pClient ( pNCliP ),
|
||||||
QDialog ( parent, f ),
|
QDialog ( parent, f ),
|
||||||
bUnreadChatMessage ( false ),
|
bUnreadChatMessage ( false ),
|
||||||
|
iErrorStatusCounter ( 0 ),
|
||||||
ClientSettingsDlg ( pNCliP, parent
|
ClientSettingsDlg ( pNCliP, parent
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// this somehow only works reliable on Windows
|
// this somehow only works reliable on Windows
|
||||||
|
@ -388,6 +389,9 @@ CLlconClientDlg::CLlconClientDlg ( CClient* pNCliP,
|
||||||
|
|
||||||
|
|
||||||
// Timers ------------------------------------------------------------------
|
// Timers ------------------------------------------------------------------
|
||||||
|
// set error status timer to a single shot timer
|
||||||
|
TimerErrorStatus.setSingleShot ( true );
|
||||||
|
|
||||||
// start timer for status bar
|
// start timer for status bar
|
||||||
TimerStatus.start ( STATUSBAR_UPDATE_TIME );
|
TimerStatus.start ( STATUSBAR_UPDATE_TIME );
|
||||||
}
|
}
|
||||||
|
@ -668,23 +672,45 @@ void CLlconClientDlg::OnPingTimeResult ( int iPingTime )
|
||||||
if ( iOverallDelayMs <= 40 )
|
if ( iOverallDelayMs <= 40 )
|
||||||
{
|
{
|
||||||
iOverallDelayLEDColor = MUL_COL_LED_GREEN;
|
iOverallDelayLEDColor = MUL_COL_LED_GREEN;
|
||||||
|
|
||||||
|
// reset ping error counter
|
||||||
|
iErrorStatusCounter = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( iOverallDelayMs <= 65 )
|
if ( iOverallDelayMs <= 65 )
|
||||||
{
|
{
|
||||||
iOverallDelayLEDColor = MUL_COL_LED_YELLOW;
|
iOverallDelayLEDColor = MUL_COL_LED_YELLOW;
|
||||||
|
|
||||||
|
// reset ping error counter
|
||||||
|
iErrorStatusCounter = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
iOverallDelayLEDColor = MUL_COL_LED_RED;
|
iOverallDelayLEDColor = MUL_COL_LED_RED;
|
||||||
|
|
||||||
|
iErrorStatusCounter++;
|
||||||
|
if ( iErrorStatusCounter >= NUM_HIGH_PINGS_UNTIL_ERROR )
|
||||||
|
{
|
||||||
|
// delay too long, show error status in main window
|
||||||
|
TimerErrorStatus.start ( ERROR_STATUS_DISPLAY_TIME );
|
||||||
|
|
||||||
|
// avoid integer overrun of error state but keep
|
||||||
|
// error state valid
|
||||||
|
iErrorStatusCounter = NUM_HIGH_PINGS_UNTIL_ERROR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// only update delay information on settings dialog if it is visible to
|
||||||
|
// avoid CPU load on working thread if not necessary
|
||||||
|
if ( ClientSettingsDlg.isVisible() )
|
||||||
|
{
|
||||||
// set ping time result to general settings dialog
|
// set ping time result to general settings dialog
|
||||||
ClientSettingsDlg.SetPingTimeResult ( iPingTime,
|
ClientSettingsDlg.SetPingTimeResult ( iPingTime,
|
||||||
iOverallDelayMs,
|
iOverallDelayMs,
|
||||||
iOverallDelayLEDColor );
|
iOverallDelayLEDColor );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CLlconClientDlg::ConnectDisconnect ( const bool bDoStart )
|
void CLlconClientDlg::ConnectDisconnect ( const bool bDoStart )
|
||||||
|
@ -716,6 +742,10 @@ void CLlconClientDlg::ConnectDisconnect ( const bool bDoStart )
|
||||||
{
|
{
|
||||||
PushButtonConnect->setText ( CON_BUT_DISCONNECTTEXT );
|
PushButtonConnect->setText ( CON_BUT_DISCONNECTTEXT );
|
||||||
|
|
||||||
|
// reset ping error counter and timer
|
||||||
|
iErrorStatusCounter = 0;
|
||||||
|
TimerErrorStatus.stop();
|
||||||
|
|
||||||
// start timer for level meter bar and ping time measurement
|
// start timer for level meter bar and ping time measurement
|
||||||
TimerSigMet.start ( LEVELMETER_UPDATE_TIME );
|
TimerSigMet.start ( LEVELMETER_UPDATE_TIME );
|
||||||
TimerPing.start ( PING_UPDATE_TIME );
|
TimerPing.start ( PING_UPDATE_TIME );
|
||||||
|
@ -765,11 +795,20 @@ void CLlconClientDlg::UpdateDisplay()
|
||||||
// show connection status in status bar
|
// show connection status in status bar
|
||||||
if ( pClient->IsConnected() && pClient->IsRunning() )
|
if ( pClient->IsConnected() && pClient->IsRunning() )
|
||||||
{
|
{
|
||||||
QString strStatus = tr ( "Connected" );
|
QString strStatus;
|
||||||
|
if ( TimerErrorStatus.isActive() )
|
||||||
|
{
|
||||||
|
// right now we only have one error case: delay too high
|
||||||
|
strStatus = tr ( "<font color=""red""><b>Audio delay too long</b></font>" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strStatus = tr ( "Connected" );
|
||||||
|
}
|
||||||
|
|
||||||
if ( bUnreadChatMessage )
|
if ( bUnreadChatMessage )
|
||||||
{
|
{
|
||||||
strStatus += ", <b>New Chat</b>";
|
strStatus += ", <b>New chat</b>";
|
||||||
}
|
}
|
||||||
|
|
||||||
TextLabelStatus->setText ( strStatus );
|
TextLabelStatus->setText ( strStatus );
|
||||||
|
|
|
@ -58,11 +58,15 @@
|
||||||
// update time for GUI controls
|
// update time for GUI controls
|
||||||
#define LEVELMETER_UPDATE_TIME 100 // ms
|
#define LEVELMETER_UPDATE_TIME 100 // ms
|
||||||
#define STATUSBAR_UPDATE_TIME 1000 // ms
|
#define STATUSBAR_UPDATE_TIME 1000 // ms
|
||||||
|
#define ERROR_STATUS_DISPLAY_TIME 3000 // ms
|
||||||
|
|
||||||
// range for signal level meter
|
// range for signal level meter
|
||||||
#define LOW_BOUND_SIG_METER ( -50.0 ) // dB
|
#define LOW_BOUND_SIG_METER ( -50.0 ) // dB
|
||||||
#define UPPER_BOUND_SIG_METER ( 0.0 ) // dB
|
#define UPPER_BOUND_SIG_METER ( 0.0 ) // dB
|
||||||
|
|
||||||
|
// number of ping times > upper bound until error message is shown
|
||||||
|
#define NUM_HIGH_PINGS_UNTIL_ERROR 5
|
||||||
|
|
||||||
|
|
||||||
/* Classes ********************************************************************/
|
/* Classes ********************************************************************/
|
||||||
class CLlconClientDlg : public QDialog, private Ui_CLlconClientDlgBase
|
class CLlconClientDlg : public QDialog, private Ui_CLlconClientDlgBase
|
||||||
|
@ -85,9 +89,11 @@ protected:
|
||||||
CClient* pClient;
|
CClient* pClient;
|
||||||
bool bConnected;
|
bool bConnected;
|
||||||
bool bUnreadChatMessage;
|
bool bUnreadChatMessage;
|
||||||
|
int iErrorStatusCounter;
|
||||||
QTimer TimerSigMet;
|
QTimer TimerSigMet;
|
||||||
QTimer TimerStatus;
|
QTimer TimerStatus;
|
||||||
QTimer TimerPing;
|
QTimer TimerPing;
|
||||||
|
QTimer TimerErrorStatus;
|
||||||
|
|
||||||
virtual void customEvent ( QEvent* Event );
|
virtual void customEvent ( QEvent* Event );
|
||||||
virtual void closeEvent ( QCloseEvent* Event );
|
virtual void closeEvent ( QCloseEvent* Event );
|
||||||
|
|
Loading…
Add table
Reference in a new issue