2006-01-28 12:29:22 +01:00
|
|
|
/******************************************************************************\
|
|
|
|
* Copyright (c) 2004-2006
|
|
|
|
*
|
|
|
|
* 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
|
|
|
|
* Foundation; either version 2 of the License, or (at your option) any later
|
|
|
|
* version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
|
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
|
|
* details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along with
|
|
|
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*
|
|
|
|
\******************************************************************************/
|
|
|
|
|
|
|
|
#include "llconserverdlg.h"
|
|
|
|
|
|
|
|
|
|
|
|
/* Implementation *************************************************************/
|
2006-02-17 20:07:10 +01:00
|
|
|
CLlconServerDlg::CLlconServerDlg ( CServer* pNServP, QWidget* parent,
|
|
|
|
const char* name, bool modal, WFlags f ) : pServer ( pNServP ),
|
|
|
|
CLlconServerDlgBase ( parent, name, modal, f )
|
2006-01-28 12:29:22 +01:00
|
|
|
{
|
|
|
|
/* set text for version and application name */
|
|
|
|
TextLabelNameVersion->
|
2006-03-12 12:50:35 +01:00
|
|
|
setText(QString(APP_NAME) + tr(" server ") + QString(VERSION));
|
2006-01-28 12:29:22 +01:00
|
|
|
|
|
|
|
/* Create bitmaps */
|
|
|
|
/* Define size of the bitmaps */
|
|
|
|
const int iXSize = 13;
|
|
|
|
const int iYSize = 13;
|
|
|
|
BitmCubeGreen.resize(iXSize, iYSize);
|
|
|
|
BitmCubeGreen.fill(QColor(0, 255, 0));
|
|
|
|
BitmCubeRed.resize(iXSize, iYSize);
|
|
|
|
BitmCubeRed.fill(QColor(255, 0, 0));
|
|
|
|
BitmCubeYellow.resize(iXSize, iYSize);
|
|
|
|
BitmCubeYellow.fill(QColor(255, 255, 0));
|
|
|
|
|
|
|
|
/* set up list view for connected clients (We assume that one column is
|
|
|
|
already there) */
|
|
|
|
ListViewClients->setColumnText(0, tr("Client IP : Port"));
|
|
|
|
ListViewClients->setColumnWidth(0, 170);
|
|
|
|
ListViewClients->addColumn(tr("Put"));
|
|
|
|
ListViewClients->setColumnAlignment(1, Qt::AlignCenter);
|
|
|
|
ListViewClients->addColumn(tr("Get"));
|
|
|
|
ListViewClients->setColumnAlignment(2, Qt::AlignCenter);
|
2006-02-20 22:09:36 +01:00
|
|
|
ListViewClients->addColumn(tr("Jitter buffer size"));
|
|
|
|
ListViewClients->setColumnAlignment(3, Qt::AlignRight);
|
2006-09-16 13:26:15 +02:00
|
|
|
ListViewClients->addColumn(tr("Block Size In"));
|
|
|
|
ListViewClients->setColumnAlignment(4, Qt::AlignRight);
|
|
|
|
ListViewClients->addColumn(tr("Block Size Out"));
|
|
|
|
ListViewClients->setColumnAlignment(5, Qt::AlignRight);
|
2006-01-28 12:29:22 +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);
|
|
|
|
for (int i = MAX_NUM_CHANNELS - 1; i >= 0; i--)
|
|
|
|
{
|
|
|
|
vecpListViewItems[i] = new CServerListViewItem(ListViewClients);
|
|
|
|
#ifndef _WIN32
|
|
|
|
vecpListViewItems[i]->setVisible(false);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Init timing jitter text label */
|
|
|
|
TextLabelResponseTime->setText("");
|
|
|
|
|
|
|
|
|
|
|
|
/* Main menu bar -------------------------------------------------------- */
|
|
|
|
pMenu = new QMenuBar(this);
|
|
|
|
CHECK_PTR(pMenu);
|
|
|
|
pMenu->insertItem(tr("&?"), new CLlconHelpMenu(this));
|
|
|
|
pMenu->setSeparator(QMenuBar::InWindowsStyle);
|
|
|
|
|
|
|
|
/* Now tell the layout about the menu */
|
|
|
|
CLlconServerDlgBaseLayout->setMenuBar(pMenu);
|
|
|
|
|
|
|
|
|
|
|
|
/* connections ---------------------------------------------------------- */
|
|
|
|
/* timers */
|
|
|
|
QObject::connect(&Timer, SIGNAL(timeout()), this, SLOT(OnTimer()));
|
|
|
|
|
2006-03-06 18:04:07 +01:00
|
|
|
|
2006-01-28 12:29:22 +01:00
|
|
|
/* timers --------------------------------------------------------------- */
|
|
|
|
/* start timer for GUI controls */
|
|
|
|
Timer.start(GUI_CONTRL_UPDATE_TIME);
|
|
|
|
}
|
|
|
|
|
|
|
|
void CLlconServerDlg::OnTimer()
|
|
|
|
{
|
|
|
|
CVector<CHostAddress> vecHostAddresses;
|
2006-02-20 22:09:36 +01:00
|
|
|
CVector<int> veciJitBufSize;
|
2006-09-16 13:26:15 +02:00
|
|
|
CVector<int> veciNetwOutBlSiFact;
|
|
|
|
CVector<int> veciNetwInBlSiFact;
|
2006-02-12 15:26:46 +01:00
|
|
|
double dCurTiStdDev;
|
2006-01-28 12:29:22 +01:00
|
|
|
|
|
|
|
ListViewMutex.lock();
|
2006-09-16 13:26:15 +02:00
|
|
|
|
|
|
|
pServer->GetConCliParam ( vecHostAddresses, veciJitBufSize,
|
|
|
|
veciNetwOutBlSiFact, veciNetwInBlSiFact );
|
2006-01-28 12:29:22 +01:00
|
|
|
|
|
|
|
/* fill list with connected clients */
|
|
|
|
for (int i = 0; i < MAX_NUM_CHANNELS; i++)
|
|
|
|
{
|
|
|
|
if (!(vecHostAddresses[i].InetAddr == QHostAddress((Q_UINT32) 0)))
|
|
|
|
{
|
|
|
|
/* main text (IP, port number) */
|
|
|
|
vecpListViewItems[i]->setText(0, QString().sprintf("%s : %d",
|
|
|
|
vecHostAddresses[i].InetAddr.toString().latin1(),
|
2006-02-20 22:09:36 +01:00
|
|
|
vecHostAddresses[i].iPort) /* IP, port */);
|
|
|
|
|
2006-02-27 20:45:27 +01:00
|
|
|
/* jitter buffer size (polling for updates) */
|
2006-02-20 22:09:36 +01:00
|
|
|
vecpListViewItems[i]->setText(3,
|
|
|
|
QString().setNum(veciJitBufSize[i]));
|
2006-09-16 13:26:15 +02:00
|
|
|
|
|
|
|
/* in / out network block sizes */
|
|
|
|
vecpListViewItems[i]->setText(4,
|
|
|
|
QString().setNum(
|
|
|
|
double(veciNetwInBlSiFact[i] * MIN_BLOCK_DURATION_MS), 'f', 2));
|
|
|
|
vecpListViewItems[i]->setText(5,
|
|
|
|
QString().setNum(
|
|
|
|
double(veciNetwOutBlSiFact[i] * MIN_BLOCK_DURATION_MS), 'f', 2));
|
2006-01-28 12:29:22 +01:00
|
|
|
|
|
|
|
#ifndef _WIN32
|
2006-02-22 18:48:25 +01:00
|
|
|
vecpListViewItems[i]->setVisible ( true );
|
2006-01-28 12:29:22 +01:00
|
|
|
#endif
|
|
|
|
}
|
2006-02-22 18:48:25 +01:00
|
|
|
else
|
|
|
|
{
|
|
|
|
#ifdef _WIN32
|
|
|
|
/* remove text for Windows version */
|
2006-09-16 13:26:15 +02:00
|
|
|
vecpListViewItems[i]->setText(0, "");
|
|
|
|
vecpListViewItems[i]->setText(3, "");
|
|
|
|
vecpListViewItems[i]->setText(4, "");
|
2006-02-22 18:48:25 +01:00
|
|
|
#else
|
|
|
|
vecpListViewItems[i]->setVisible ( false );
|
|
|
|
#endif
|
|
|
|
}
|
2006-01-28 12:29:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
ListViewMutex.unlock();
|
|
|
|
|
2006-02-12 15:26:46 +01:00
|
|
|
/* response time (if available) */
|
2006-02-17 20:07:10 +01:00
|
|
|
if ( pServer->GetTimingStdDev ( dCurTiStdDev ) )
|
2006-02-12 15:26:46 +01:00
|
|
|
{
|
|
|
|
TextLabelResponseTime->setText(QString().
|
|
|
|
setNum(dCurTiStdDev, 'f', 2) + " ms");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
TextLabelResponseTime->setText("---");
|
|
|
|
}
|
2006-01-28 12:29:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void CLlconServerDlg::customEvent(QCustomEvent* Event)
|
|
|
|
{
|
|
|
|
if (Event->type() == QEvent::User + 11)
|
|
|
|
{
|
|
|
|
ListViewMutex.lock();
|
|
|
|
|
|
|
|
const int iMessType = ((CLlconEvent*) Event)->iMessType;
|
|
|
|
const int iStatus = ((CLlconEvent*) Event)->iStatus;
|
|
|
|
const int iChanNum = ((CLlconEvent*) Event)->iChanNum;
|
|
|
|
|
|
|
|
switch(iMessType)
|
|
|
|
{
|
|
|
|
case MS_JIT_BUF_PUT:
|
|
|
|
vecpListViewItems[iChanNum]->SetLight(0, iStatus);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case MS_JIT_BUF_GET:
|
|
|
|
vecpListViewItems[iChanNum]->SetLight(1, iStatus);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
ListViewMutex.unlock();
|
|
|
|
}
|
|
|
|
}
|