diff options
Diffstat (limited to 'signet/Server.cpp')
| -rw-r--r-- | signet/Server.cpp | 86 |
1 files changed, 56 insertions, 30 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); } |
