# HG changeset patch # User displacer # Date 1170889189 0 # Node ID 523f1769f2bc62fb83d742b0186910e249787676 # Parent 2ddcc3e3e6446a3456b8a154485057c72ed9672b udp server detecting experimental version (added files) diff -r 2ddcc3e3e644 -r 523f1769f2bc QTfrontend/netudpserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/netudpserver.cpp Wed Feb 07 22:59:49 2007 +0000 @@ -0,0 +1,31 @@ +#include + +#include "netudpserver.h" + +#include + +HWNetUdpServer::HWNetUdpServer(QObject* parent) : + QObject(parent) +{ + pUdpSocket = new QUdpSocket(this); + pUdpSocket->bind(46631); + + connect(pUdpSocket, SIGNAL(readyRead()), this, SLOT(onClientRead())); + +} + +void HWNetUdpServer::onClientRead() +{ + 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 client")) { + // send answer to client + qDebug() << "received UDP query from " << clientAddr << ":" << clientPort; + pUdpSocket->writeDatagram("hedgewars server", clientAddr, 46632); + } + } +} diff -r 2ddcc3e3e644 -r 523f1769f2bc QTfrontend/netudpserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/netudpserver.h Wed Feb 07 22:59:49 2007 +0000 @@ -0,0 +1,22 @@ +#ifndef _NET_UDPSERVER_INCLUDED +#define _NET_UDPSERVER_INCLUDED + +#include + +class QUdpSocket; + +class HWNetUdpServer : public QObject +{ + Q_OBJECT + + public: + HWNetUdpServer(QObject *parent = 0); + + private slots: + void onClientRead(); + + private: + QUdpSocket* pUdpSocket; +}; + +#endif // _NET_UDPSERVER_INCLUDED diff -r 2ddcc3e3e644 -r 523f1769f2bc QTfrontend/netudpwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/netudpwidget.cpp Wed Feb 07 22:59:49 2007 +0000 @@ -0,0 +1,33 @@ +#include +#include + +#include "netudpwidget.h" + +#include + +HWNetUdpWidget::HWNetUdpWidget(QWidget* parent) : + QWidget(parent), mainLayout(this) +{ + serversList = new QListWidget(this); + mainLayout.addWidget(serversList); + pUdpSocket = new QUdpSocket(this); + + pUdpSocket->bind();//46632); + connect(pUdpSocket, SIGNAL(readyRead()), this, SLOT(onClientRead())); + pUdpSocket->writeDatagram("hedgewars client", QHostAddress::Broadcast, 46631); +} + +void HWNetUdpWidget::onClientRead() +{ + 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")) { + qDebug() << "detected server at " << clientAddr << ":" << clientPort; + serversList->addItem(clientAddr.toString()); + } + } +} diff -r 2ddcc3e3e644 -r 523f1769f2bc QTfrontend/netudpwidget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QTfrontend/netudpwidget.h Wed Feb 07 22:59:49 2007 +0000 @@ -0,0 +1,26 @@ +#ifndef _NET_UDPWIDGET_INCLUDED +#define _NET_UDPWIDGET_INCLUDED + +#include +#include + +class QUdpSocket; +class QListWidget; + +class HWNetUdpWidget : public QWidget +{ + Q_OBJECT + + public: + HWNetUdpWidget(QWidget *parent = 0); + + private slots: + void onClientRead(); + + private: + QVBoxLayout mainLayout; + QUdpSocket* pUdpSocket; + QListWidget* serversList; +}; + +#endif // _NET_UDPWIDGET_INCLUDED