summaryrefslogtreecommitdiffstats
path: root/signet
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2008-10-31 21:29:28 +0000
committerBen Boeckel <MathStuf@gmail.com>2008-10-31 21:29:28 +0000
commitff3295a0ede441caef7a133d2f4f4a472b5b7cde (patch)
tree11048915bd09d2947f7bd53b5c1a1e391925a36e /signet
parent60e7fc8eb418c5dbbbd2788c4e7987c475268e69 (diff)
downloadsigen-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.cpp86
-rw-r--r--signet/Server.h18
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;
};
}