diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2008-10-31 21:29:28 +0000 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2008-10-31 21:29:28 +0000 |
commit | ff3295a0ede441caef7a133d2f4f4a472b5b7cde (patch) | |
tree | 11048915bd09d2947f7bd53b5c1a1e391925a36e /signet | |
parent | 60e7fc8eb418c5dbbbd2788c4e7987c475268e69 (diff) | |
download | sigen-ff3295a0ede441caef7a133d2f4f4a472b5b7cde.tar.gz sigen-ff3295a0ede441caef7a133d2f4f4a472b5b7cde.tar.xz sigen-ff3295a0ede441caef7a133d2f4f4a472b5b7cde.zip |
[FIX] Server is better formed
git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@288 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'signet')
-rw-r--r-- | signet/Server.cpp | 86 | ||||
-rw-r--r-- | signet/Server.h | 18 |
2 files changed, 73 insertions, 31 deletions
diff --git a/signet/Server.cpp b/signet/Server.cpp index 332c305f..bd23faf5 100644 --- a/signet/Server.cpp +++ b/signet/Server.cpp @@ -26,10 +26,16 @@ #include <KConfigGroup> #include <KGlobal> +// Qt includes +#include <QtCore/QtGlobal> +#include <QtCore/QTimer> +#include <QtNetwork/QTcpSocket> + Signet::Server::Server(QObject* parent) : ConnectionHandler(parent) { - connectToMaster(KGlobal::config()->group("Master Server")); + loadConfiguration(); + connectToMaster(); } void Signet::Server::createRoom(const QString& room) @@ -48,6 +54,27 @@ void Signet::Server::closeRoom(const QString& room) } } +void Signet::Server::hostFound() +{ + qDebug("Master server found"); +} + +void Signet::Server::hostConnected() +{ + qDebug("Master server connected"); +} + +void Signet::Server::hostDisconnected() +{ + QTimer::singleShot(60000, this, SLOT(connectToMaster())); + qCritical("Master server disconnected; will retry in 60 seconds"); +} + +void Signet::Server::hostError() +{ + qCritical("Master server socket error: %s", m_master->errorString().toUtf8().constData()); +} + void Signet::Server::joinRoom(Client* client, const QString& roomName) { if (!m_rooms.contains(roomName)) @@ -58,34 +85,33 @@ void Signet::Server::joinRoom(Client* client, const QString& roomName) } } -void Signet::Server::connectToMaster(const KConfigGroup& group) +void Signet::Server::loadConfiguration() +{ + if (KGlobal::config()->hasGroup("Master Server")) + { + const KConfigGroup& group = KGlobal::config()->group("Master Server"); + QString host = group.readEntry("Host", ""); + if (!m_masterHost.setAddress(host)) + qFatal("Invalid address for the master server: %s", host.toUtf8().constData()); + m_masterPort = group.readEntry("Port", -1); + if (m_masterPort < 0) + qFatal("Invalid port for the master server: %d", m_masterPort); + m_key = group.readEntry("Key", ""); + } + else + qFatal("Configuration does not contain a \"Master Server\" group"); +} + +void Signet::Server::connectToMaster() { - // TODO: Get the information from the configuration - // TODO: Connect to the master -// QHostAddress masterAddress; -// int port; -// QString key; -// int timeout; -// if (config->hasGroup("Master Server")) -// { -// const KConfigGroup& group = config->group("Master Server"); -// QString address = group.readEntry("Address", ""); -// if (!masterAddress.setAddress(address)) -// qFatal(QString("Invalid address for the master server: %1").arg(address)); -// port = group.readEntry("Port", -1); -// if (port < 0) -// qFatal(QString("Invalid port for the master server: %1").arg(port)); -// key = group.readEntry("Key", ""); -// timeout = group.readEntry("Timeout", 30000); -// } -// else -// { -// // TODO: Configuration not complete -// } -// // TODO: Proxy support? -// m_masterServer->connectToHost(masterAddress, port); -// if (!m_masterServer->waitForConnect(timeout)) -// { -// // TODO: Connect failed -// } + if (!m_master) + { + m_master = new QTcpSocket(this); + connect(m_master, SIGNAL(hostFound()), this, SLOT(hostFound())); + connect(m_master, SIGNAL(connected()), this, SLOT(hostConnected())); + connect(m_master, SIGNAL(disconnected()), this, SLOT(hostDisconnected())); + connect(m_master, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(hostError())); + } + // TODO: Proxy support? + m_master->connectToHost(m_masterHost, m_masterPort); } diff --git a/signet/Server.h b/signet/Server.h index 58328188..a8cb31ff 100644 --- a/signet/Server.h +++ b/signet/Server.h @@ -25,9 +25,12 @@ // Qt includes #include <QtCore/QMap> #include <QtCore/QObject> +#include <QtCore/QUuid> +#include <QtNetwork/QHostAddress> // Forward declarations class KConfigGroup; +class QTcpSocket; namespace Signet { @@ -48,10 +51,23 @@ class SIGNET_EXPORT Server : public ConnectionHandler bool verifyUser(Client* client); protected slots: + void hostFound(); + void hostConnected(); + void hostDisconnected(); + void hostError(); + void joinRoom(Client* client, const QString& roomName); - void connectToMaster(const KConfigGroup& group); + void loadConfiguration(); + + void connectToMaster(); private: + QTcpSocket* m_master; + + QHostAddress m_masterHost; + int m_masterPort; + QUuid m_key; + QMap<QString, Room*> m_rooms; }; } |