2006-12-18 15:39:33 +01:00
|
|
|
/******************************************************************************\
|
2009-02-22 12:07:18 +01:00
|
|
|
* Copyright (c) 2004-2009
|
2006-12-18 15:39:33 +01:00
|
|
|
*
|
|
|
|
* Author(s):
|
|
|
|
* Volker Fischer
|
|
|
|
*
|
|
|
|
******************************************************************************
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify it under
|
|
|
|
* the terms of the GNU General Public License as published by the Free Software
|
2008-03-28 22:46:13 +01:00
|
|
|
* Foundation; either version 2 of the License, or (at your option) any later
|
2006-12-18 15:39:33 +01:00
|
|
|
* version.
|
|
|
|
*
|
2008-03-28 22:46:13 +01:00
|
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
2006-12-18 15:39:33 +01:00
|
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
2008-03-28 22:46:13 +01:00
|
|
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
2006-12-18 15:39:33 +01:00
|
|
|
* details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along with
|
2008-03-28 22:46:13 +01:00
|
|
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
2006-12-18 15:39:33 +01:00
|
|
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*
|
|
|
|
\******************************************************************************/
|
|
|
|
|
|
|
|
#include "llconserverdlg.h"
|
|
|
|
|
|
|
|
|
|
|
|
/* Implementation *************************************************************/
|
2008-01-14 23:14:17 +01:00
|
|
|
CLlconServerDlg::CLlconServerDlg ( CServer* pNServP, QWidget* parent )
|
2008-01-15 23:54:04 +01:00
|
|
|
: pServer ( pNServP ), QDialog ( parent ),
|
2008-03-28 22:46:13 +01:00
|
|
|
BitmCubeGreen ( LED_WIDTH_HEIGHT_SIZE_PIXEL, LED_WIDTH_HEIGHT_SIZE_PIXEL ),
|
|
|
|
BitmCubeRed ( LED_WIDTH_HEIGHT_SIZE_PIXEL, LED_WIDTH_HEIGHT_SIZE_PIXEL ),
|
2008-01-15 23:54:04 +01:00
|
|
|
BitmCubeYellow ( LED_WIDTH_HEIGHT_SIZE_PIXEL, LED_WIDTH_HEIGHT_SIZE_PIXEL )
|
2006-12-18 15:39:33 +01:00
|
|
|
{
|
2008-01-22 20:58:53 +01:00
|
|
|
setupUi ( this );
|
|
|
|
|
|
|
|
// set text for version and application name
|
2006-12-29 11:52:25 +01:00
|
|
|
TextLabelNameVersion->setText ( QString ( APP_NAME ) +
|
|
|
|
tr ( " server " ) + QString ( VERSION ) );
|
2006-12-18 15:39:33 +01:00
|
|
|
|
2008-01-22 20:58:53 +01:00
|
|
|
// create bitmaps
|
2008-03-28 22:46:13 +01:00
|
|
|
BitmCubeGreen.fill ( QColor ( 0, 255, 0 ) );
|
|
|
|
BitmCubeRed.fill ( QColor ( 255, 0, 0 ) );
|
2006-12-29 11:52:25 +01:00
|
|
|
BitmCubeYellow.fill ( QColor ( 255, 255, 0 ) );
|
2006-12-18 15:39:33 +01:00
|
|
|
|
2008-01-15 23:54:04 +01:00
|
|
|
// set up list view for connected clients
|
2006-12-29 11:52:25 +01:00
|
|
|
ListViewClients->setColumnWidth ( 0, 170 );
|
2008-01-17 19:56:43 +01:00
|
|
|
|
|
|
|
// TODO QT4
|
|
|
|
|
2008-01-15 23:54:04 +01:00
|
|
|
// ListViewClients->setColumnAlignment ( 1, Qt::AlignLeft );
|
2006-12-29 11:52:25 +01:00
|
|
|
ListViewClients->setColumnWidth ( 1, 150 );
|
2008-01-15 23:54:04 +01:00
|
|
|
// ListViewClients->setColumnAlignment ( 2, Qt::AlignCenter );
|
|
|
|
// ListViewClients->setColumnAlignment ( 3, Qt::AlignCenter );
|
|
|
|
// ListViewClients->setColumnAlignment ( 4, Qt::AlignRight );
|
|
|
|
// ListViewClients->setColumnAlignment ( 5, Qt::AlignRight );
|
|
|
|
// ListViewClients->setColumnAlignment ( 6, Qt::AlignRight );
|
2006-12-18 15:39:33 +01:00
|
|
|
ListViewClients->clear();
|
|
|
|
|
|
|
|
/* insert items in reverse order because in Windows all of them are
|
|
|
|
always visible -> put first item on the top */
|
|
|
|
vecpListViewItems.Init(MAX_NUM_CHANNELS);
|
2007-09-08 12:45:14 +02:00
|
|
|
for ( int i = MAX_NUM_CHANNELS - 1; i >= 0; i-- )
|
2006-12-18 15:39:33 +01:00
|
|
|
{
|
2007-09-08 12:45:14 +02:00
|
|
|
vecpListViewItems[i] = new CServerListViewItem ( ListViewClients );
|
2008-03-28 22:46:13 +01:00
|
|
|
vecpListViewItems[i]->setHidden ( true );
|
2006-12-18 15:39:33 +01:00
|
|
|
}
|
|
|
|
|
2008-01-15 23:54:04 +01:00
|
|
|
// Init timing jitter text label
|
2007-09-08 12:45:14 +02:00
|
|
|
TextLabelResponseTime->setText ( "" );
|
2006-01-28 12:29:22 +01:00
|
|
|
|
|
|
|
|
2008-01-22 20:58:53 +01:00
|
|
|
// Main menu bar -----------------------------------------------------------
|
2007-09-08 12:45:14 +02:00
|
|
|
pMenu = new QMenuBar ( this );
|
2008-01-15 23:54:04 +01:00
|
|
|
pMenu->addMenu ( new CLlconHelpMenu ( this ) );
|
2006-01-28 12:29:22 +01:00
|
|
|
|
2008-01-15 23:54:04 +01:00
|
|
|
// Now tell the layout about the menu
|
|
|
|
layout()->setMenuBar ( pMenu );
|
2006-01-28 12:29:22 +01:00
|
|
|
|
2006-12-18 15:39:33 +01:00
|
|
|
|
2008-01-22 20:58:53 +01:00
|
|
|
// Connections -------------------------------------------------------------
|
2008-01-15 23:54:04 +01:00
|
|
|
// timers
|
2007-09-08 12:45:14 +02:00
|
|
|
QObject::connect ( &Timer, SIGNAL ( timeout() ), this, SLOT ( OnTimer() ) );
|
2006-12-18 15:39:33 +01:00
|
|
|
|
|
|
|
|
2008-01-22 20:58:53 +01:00
|
|
|
// Timers ------------------------------------------------------------------
|
2008-01-15 23:54:04 +01:00
|
|
|
// start timer for GUI controls
|
2007-09-08 12:45:14 +02:00
|
|
|
Timer.start ( GUI_CONTRL_UPDATE_TIME );
|
2006-12-18 15:39:33 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void CLlconServerDlg::OnTimer()
|
|
|
|
{
|
|
|
|
CVector<CHostAddress> vecHostAddresses;
|
2008-01-22 22:15:04 +01:00
|
|
|
CVector<QString> vecsName;
|
2006-11-25 15:46:57 +01:00
|
|
|
CVector<int> veciJitBufSize;
|
|
|
|
CVector<int> veciNetwOutBlSiFact;
|
|
|
|
CVector<int> veciNetwInBlSiFact;
|
2006-12-18 15:39:33 +01:00
|
|
|
double dCurTiStdDev;
|
|
|
|
|
|
|
|
ListViewMutex.lock();
|
2006-09-16 13:26:15 +02:00
|
|
|
|
2006-12-29 11:52:25 +01:00
|
|
|
pServer->GetConCliParam ( vecHostAddresses, vecsName, veciJitBufSize,
|
2006-11-25 15:46:57 +01:00
|
|
|
veciNetwOutBlSiFact, veciNetwInBlSiFact );
|
2006-12-18 15:39:33 +01:00
|
|
|
|
2008-01-22 20:58:53 +01:00
|
|
|
// fill list with connected clients
|
2006-12-29 11:52:25 +01:00
|
|
|
for ( int i = 0; i < MAX_NUM_CHANNELS; i++ )
|
2006-12-18 15:39:33 +01:00
|
|
|
{
|
2008-01-14 23:14:17 +01:00
|
|
|
if ( !( vecHostAddresses[i].InetAddr == QHostAddress ( (quint32) 0 ) ) )
|
2006-12-18 15:39:33 +01:00
|
|
|
{
|
2006-12-29 11:52:25 +01:00
|
|
|
// IP, port number
|
2008-03-28 22:46:13 +01:00
|
|
|
vecpListViewItems[i]->setText ( 0, QString("%1 : %2" ).
|
|
|
|
arg ( vecHostAddresses[i].InetAddr.toString() ).
|
|
|
|
arg ( vecHostAddresses[i].iPort ) );
|
2006-02-20 22:09:36 +01:00
|
|
|
|
2006-12-29 11:52:25 +01:00
|
|
|
// name
|
2008-01-22 22:15:04 +01:00
|
|
|
vecpListViewItems[i]->setText ( 1, vecsName[i] );
|
2006-09-16 13:26:15 +02:00
|
|
|
|
2006-12-29 11:52:25 +01:00
|
|
|
// jitter buffer size (polling for updates)
|
|
|
|
vecpListViewItems[i]->setText ( 4,
|
|
|
|
QString().setNum ( veciJitBufSize[i] ) );
|
|
|
|
|
|
|
|
// in/out network block sizes
|
|
|
|
vecpListViewItems[i]->setText ( 5,
|
|
|
|
QString().setNum (
|
2008-01-26 15:55:38 +01:00
|
|
|
double ( veciNetwInBlSiFact[i] * MIN_BLOCK_DURATION_MS ), 'f', 2 ) );
|
2008-03-28 22:46:13 +01:00
|
|
|
vecpListViewItems[i]->setText ( 6,
|
2006-12-29 11:52:25 +01:00
|
|
|
QString().setNum (
|
2008-01-26 15:55:38 +01:00
|
|
|
double ( veciNetwOutBlSiFact[i] * MIN_BLOCK_DURATION_MS ), 'f', 2 ) );
|
2006-12-18 15:39:33 +01:00
|
|
|
|
2008-03-28 22:46:13 +01:00
|
|
|
vecpListViewItems[i]->setHidden ( false );
|
2006-12-18 15:39:33 +01:00
|
|
|
}
|
2006-11-25 15:46:57 +01:00
|
|
|
else
|
|
|
|
{
|
2008-03-28 22:46:13 +01:00
|
|
|
vecpListViewItems[i]->setHidden ( true );
|
2006-12-18 15:39:33 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-11-25 15:46:57 +01:00
|
|
|
ListViewMutex.unlock();
|
2006-01-28 12:29:22 +01:00
|
|
|
|
2006-12-29 11:52:25 +01:00
|
|
|
// response time (if available)
|
2006-11-25 15:46:57 +01:00
|
|
|
if ( pServer->GetTimingStdDev ( dCurTiStdDev ) )
|
|
|
|
{
|
2006-12-29 11:52:25 +01:00
|
|
|
TextLabelResponseTime->setText ( QString().
|
|
|
|
setNum ( dCurTiStdDev, 'f', 2 ) + " ms" );
|
2006-11-25 15:46:57 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2006-12-29 11:52:25 +01:00
|
|
|
TextLabelResponseTime->setText ( "---" );
|
2006-12-18 15:39:33 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-01-15 21:07:55 +01:00
|
|
|
void CLlconServerDlg::customEvent ( QEvent* Event )
|
2006-12-18 15:39:33 +01:00
|
|
|
{
|
2006-12-29 11:52:25 +01:00
|
|
|
if ( Event->type() == QEvent::User + 11 )
|
2006-12-18 15:39:33 +01:00
|
|
|
{
|
|
|
|
ListViewMutex.lock();
|
|
|
|
|
2006-12-29 11:52:25 +01:00
|
|
|
const int iMessType = ( (CLlconEvent*) Event )->iMessType;
|
2008-03-28 22:46:13 +01:00
|
|
|
const int iStatus = ( (CLlconEvent*) Event )->iStatus;
|
|
|
|
const int iChanNum = ( (CLlconEvent*) Event )->iChanNum;
|
2006-12-18 15:39:33 +01:00
|
|
|
|
|
|
|
switch(iMessType)
|
|
|
|
{
|
|
|
|
case MS_JIT_BUF_PUT:
|
2006-12-29 11:52:25 +01:00
|
|
|
vecpListViewItems[iChanNum]->SetLight ( 0, iStatus );
|
2006-12-18 15:39:33 +01:00
|
|
|
break;
|
|
|
|
|
|
|
|
case MS_JIT_BUF_GET:
|
2006-12-29 11:52:25 +01:00
|
|
|
vecpListViewItems[iChanNum]->SetLight ( 1, iStatus );
|
2006-12-18 15:39:33 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
ListViewMutex.unlock();
|
|
|
|
}
|
|
|
|
}
|