diff -r 07fa9a74a074 -r 194dc62d1519 QTfrontend/netudpwidget.cpp --- a/QTfrontend/netudpwidget.cpp Sat Dec 15 19:44:05 2007 +0000 +++ b/QTfrontend/netudpwidget.cpp Sat Dec 15 20:08:08 2007 +0000 @@ -1,6 +1,7 @@ /* * Hedgewars, a worms-like game * Copyright (c) 2007 Ulyanov Igor + * Copyright (c) 2007 Andrey Korotaev * * 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 @@ -17,36 +18,89 @@ */ #include -#include #include "netudpwidget.h" -/*HWNetUdpWidget::HWNetUdpWidget(QWidget* parent) : - HWNetServersWidget(parent) +HWNetUdpModel::HWNetUdpModel(QObject* parent) : + HWNetServersModel(parent) { - pUdpSocket = new QUdpSocket(this); + pUdpSocket = new QUdpSocket(this); + + pUdpSocket->bind(); + connect(pUdpSocket, SIGNAL(readyRead()), this, SLOT(onClientRead())); +} - pUdpSocket->bind(); - connect(pUdpSocket, SIGNAL(readyRead()), this, SLOT(onClientRead())); +void HWNetUdpModel::updateList() +{ + games.clear(); + + reset(); + + pUdpSocket->writeDatagram("hedgewars client", QHostAddress::Broadcast, 46631); } -void HWNetUdpWidget::updateList() +void HWNetUdpModel::onClientRead() { -// serversList->clear(); - pUdpSocket->writeDatagram("hedgewars client", QHostAddress::Broadcast, 46631); + while (pUdpSocket->hasPendingDatagrams()) { + QByteArray datagram; + datagram.resize(pUdpSocket->pendingDatagramSize()); + QHostAddress clientAddr; + quint16 clientPort; + + pUdpSocket->readDatagram(datagram.data(), datagram.size(), &clientAddr, &clientPort); + + if(QString("%1").arg(datagram.data())==QString("hedgewars server")) { + QStringList sl; + sl << "-" << clientAddr.toString() << "46631"; + games.append(sl); + } + } + + reset(); } -void HWNetUdpWidget::onClientRead() +QVariant HWNetUdpModel::data(const QModelIndex &index, + int role) const +{ + if (!index.isValid() || index.row() < 0 + || index.row() >= games.size() + || role != Qt::DisplayRole) + return QVariant(); + + return games[index.row()][index.column()]; +} + +QVariant HWNetUdpModel::headerData(int section, + Qt::Orientation orientation, int role) const { - while (pUdpSocket->hasPendingDatagrams()) { - QByteArray datagram; - datagram.resize(pUdpSocket->pendingDatagramSize()); - QHostAddress clientAddr; - quint16 clientPort; - pUdpSocket->readDatagram(datagram.data(), datagram.size(), &clientAddr, &clientPort); - if(QString("%1").arg(datagram.data())==QString("hedgewars server")) { -// serversList->addItem(clientAddr.toString()); - } - } + if (role != Qt::DisplayRole) + return QVariant(); + + if (orientation == Qt::Horizontal) + { + switch (section) + { + case 0: return tr("Title"); + case 1: return tr("IP"); + case 2: return tr("Port"); + default: return QVariant(); + } + } else + return QString("%1").arg(section + 1); } -*/ \ No newline at end of file + +int HWNetUdpModel::rowCount(const QModelIndex &parent) const +{ + if (parent.isValid()) + return 0; + else + return games.size(); +} + +int HWNetUdpModel::columnCount(const QModelIndex & parent) const +{ + if (parent.isValid()) + return 0; + else + return 3; +}