summaryrefslogtreecommitdiffstats
path: root/atlantik/atlanticd
diff options
context:
space:
mode:
Diffstat (limited to 'atlantik/atlanticd')
-rw-r--r--atlantik/atlanticd/Makefile.am10
-rw-r--r--atlantik/atlanticd/README6
-rw-r--r--atlantik/atlanticd/TODO11
-rw-r--r--atlantik/atlanticd/atlanticclient.cpp49
-rw-r--r--atlantik/atlanticd/atlanticclient.h36
-rw-r--r--atlantik/atlanticd/atlanticdaemon.cpp72
-rw-r--r--atlantik/atlanticd/atlanticdaemon.h48
-rw-r--r--atlantik/atlanticd/main.cpp27
-rw-r--r--atlantik/atlanticd/serversocket.cpp32
-rw-r--r--atlantik/atlanticd/serversocket.h35
10 files changed, 326 insertions, 0 deletions
diff --git a/atlantik/atlanticd/Makefile.am b/atlantik/atlanticd/Makefile.am
new file mode 100644
index 00000000..65e3475a
--- /dev/null
+++ b/atlantik/atlanticd/Makefile.am
@@ -0,0 +1,10 @@
+KDE_OPTIONS = qtonly
+
+bin_PROGRAMS = atlanticd
+
+INCLUDES = -I$(top_srcdir)/atlantik/libatlantic $(QT_INCLUDES)
+LDADD = ../libatlantic/libatlantic.la
+
+atlanticd_SOURCES = atlanticclient.cpp atlanticdaemon.cpp main.cpp serversocket.cpp
+
+METASOURCES = AUTO
diff --git a/atlantik/atlanticd/README b/atlantik/atlanticd/README
new file mode 100644
index 00000000..a0bf03b1
--- /dev/null
+++ b/atlantik/atlanticd/README
@@ -0,0 +1,6 @@
+The purpose of atlanticd is to provide a monopd-compatible server, for
+inclusion with the Atlantik client.
+
+Eventually atlanticd will be full-featured and a capable monopd replacement,
+but at this very moment it's still a prototype and not useful for actual
+games.
diff --git a/atlantik/atlanticd/TODO b/atlantik/atlanticd/TODO
new file mode 100644
index 00000000..fb121b4e
--- /dev/null
+++ b/atlantik/atlanticd/TODO
@@ -0,0 +1,11 @@
+This is a very basic TODO, only aimed at the most urgent goals and
+requirements. A complete reference would be the existing functionality of
+monopd.
+
+v create base class, AtlanticDaemon
+ v add monopigator method and timer
+ v create serversocket here
+ - let serversocket signal and atlanticd create client object
+ - create game object
+ - send list of games upon new connect
+
diff --git a/atlantik/atlanticd/atlanticclient.cpp b/atlantik/atlanticd/atlanticclient.cpp
new file mode 100644
index 00000000..0445165d
--- /dev/null
+++ b/atlantik/atlanticd/atlanticclient.cpp
@@ -0,0 +1,49 @@
+// Copyright (c) 2002 Rob Kaper <[email protected]>
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; see the file COPYING. If not, write to
+// the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <qtextstream.h>
+#include <qtimer.h>
+
+#include "atlanticclient.h"
+#include "atlanticclient.moc"
+
+AtlanticClient::AtlanticClient(QObject *parent, const char *name) : QSocket(parent, name)
+{
+ connect(this, SIGNAL(readyRead()), this, SLOT(readData()));
+}
+
+void AtlanticClient::sendData(const QString &data)
+{
+ writeBlock(data.latin1(), data.length());
+}
+
+void AtlanticClient::readData()
+{
+ if (canReadLine())
+ {
+ emit clientInput(this, readLine());
+
+ // There might be more data
+ QTimer::singleShot(0, this, SLOT(readData()));
+ }
+ else
+ {
+ // Maximum message size. Messages won't get bigger than 32k anyway, so
+ // if we didn't receive a newline by now, we probably won't anyway.
+ if (bytesAvailable() > (1024 * 32))
+ flush();
+ }
+}
diff --git a/atlantik/atlanticd/atlanticclient.h b/atlantik/atlanticd/atlanticclient.h
new file mode 100644
index 00000000..7b47b0f3
--- /dev/null
+++ b/atlantik/atlanticd/atlanticclient.h
@@ -0,0 +1,36 @@
+// Copyright (c) 2002-2003 Rob Kaper <[email protected]>
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; see the file COPYING. If not, write to
+// the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#ifndef CLIENT_H
+#define CLIENT_H
+
+#include <qsocket.h>
+
+class AtlanticClient : public QSocket
+{
+Q_OBJECT
+
+public:
+ AtlanticClient(QObject *parent = 0, const char *name = 0);
+ void sendData(const QString &data);
+
+private slots:
+ void readData();
+
+signals:
+ void clientInput(AtlanticClient *client, const QString &data);
+};
+#endif
diff --git a/atlantik/atlanticd/atlanticdaemon.cpp b/atlantik/atlanticd/atlanticdaemon.cpp
new file mode 100644
index 00000000..3fb80cf0
--- /dev/null
+++ b/atlantik/atlanticd/atlanticdaemon.cpp
@@ -0,0 +1,72 @@
+// Copyright (c) 2002 Rob Kaper <[email protected]>
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; see the file COPYING. If not, write to
+// the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <qtimer.h>
+#include <qsocket.h>
+#include <qstring.h>
+
+#include <atlantic_core.h>
+
+#include "atlanticclient.h"
+#include "atlanticdaemon.h"
+#include "atlanticdaemon.moc"
+#include "serversocket.h"
+
+AtlanticDaemon::AtlanticDaemon()
+{
+ m_serverSocket = new ServerSocket(1234, 100);
+ connect(m_serverSocket, SIGNAL(newClient(AtlanticClient *)), this, SLOT(newClient(AtlanticClient *)));
+
+ m_atlanticCore = new AtlanticCore(this, "atlanticCore");
+
+ // Create socket for Monopigator
+ m_monopigatorSocket = new QSocket();
+ connect(m_monopigatorSocket, SIGNAL(connected()), this, SLOT(monopigatorConnected()));
+
+ // Register server
+ monopigatorRegister();
+}
+
+AtlanticDaemon::~AtlanticDaemon()
+{
+ delete m_monopigatorSocket;
+}
+
+void AtlanticDaemon::monopigatorRegister()
+{
+ m_monopigatorSocket->connectToHost("gator.monopd.net", 80);
+}
+
+void AtlanticDaemon::monopigatorConnected()
+{
+ QString get = "GET /register.php?host=capsi.com&port=1234&version=atlanticd-prototype HTTP/1.1\nHost: gator.monopd.net\n\n";
+ m_monopigatorSocket->writeBlock(get.latin1(), get.length());
+ m_monopigatorSocket->close();
+
+ // Monopigator clears old entries, so keep registering every 180s
+ QTimer::singleShot(180000, this, SLOT(monopigatorRegister()));
+}
+
+void AtlanticDaemon::newClient(AtlanticClient *client)
+{
+ m_clients.append(client);
+
+ connect(client, SIGNAL(clientInput(AtlanticClient *, const QString &)), this, SLOT(clientInput(AtlanticClient *, const QString &)));
+}
+
+void AtlanticDaemon::clientInput(AtlanticClient *client, const QString &data)
+{
+}
diff --git a/atlantik/atlanticd/atlanticdaemon.h b/atlantik/atlanticd/atlanticdaemon.h
new file mode 100644
index 00000000..729a960e
--- /dev/null
+++ b/atlantik/atlanticd/atlanticdaemon.h
@@ -0,0 +1,48 @@
+// Copyright (c) 2002 Rob Kaper <[email protected]>
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; see the file COPYING. If not, write to
+// the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#ifndef ATLANTIC_ATLANTICDAEMON_H
+#define ATLANTIC_ATLANTICDAEMON_H
+
+#include <qptrlist.h>
+
+class QSocket;
+
+class AtlanticCore;
+class AtlanticClient;
+class ServerSocket;
+
+class AtlanticDaemon : public QObject
+{
+Q_OBJECT
+
+public:
+ AtlanticDaemon();
+ ~AtlanticDaemon();
+private slots:
+ void monopigatorRegister();
+ void monopigatorConnected();
+ void newClient(AtlanticClient *client);
+ void clientInput(AtlanticClient *client, const QString &data);
+
+private:
+ QSocket *m_monopigatorSocket;
+ ServerSocket *m_serverSocket;
+ AtlanticCore *m_atlanticCore;
+ QPtrList<AtlanticClient> m_clients;
+};
+
+#endif
diff --git a/atlantik/atlanticd/main.cpp b/atlantik/atlanticd/main.cpp
new file mode 100644
index 00000000..235dcd00
--- /dev/null
+++ b/atlantik/atlanticd/main.cpp
@@ -0,0 +1,27 @@
+// Copyright (c) 2002 Rob Kaper <[email protected]>
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; see the file COPYING. If not, write to
+// the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include <qapplication.h>
+
+#include "atlanticdaemon.h"
+
+int main(int argc, char *argv[])
+{
+ new AtlanticDaemon();
+
+ QApplication qapplication(argc, argv);
+ qapplication.exec();
+}
diff --git a/atlantik/atlanticd/serversocket.cpp b/atlantik/atlanticd/serversocket.cpp
new file mode 100644
index 00000000..2056a754
--- /dev/null
+++ b/atlantik/atlanticd/serversocket.cpp
@@ -0,0 +1,32 @@
+// Copyright (c) 2002-2003 Rob Kaper <[email protected]>
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; see the file COPYING. If not, write to
+// the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#include "atlanticclient.h"
+#include "serversocket.h"
+
+ServerSocket::ServerSocket(int port, int backlog) : QServerSocket(port, backlog)
+{
+}
+
+void ServerSocket::newConnection(int socket)
+{
+ AtlanticClient *client = new AtlanticClient(this, "socket");
+ client->setSocket(socket);
+
+ emit newClient(client);
+}
+
+#include "serversocket.moc"
diff --git a/atlantik/atlanticd/serversocket.h b/atlantik/atlanticd/serversocket.h
new file mode 100644
index 00000000..fce347e9
--- /dev/null
+++ b/atlantik/atlanticd/serversocket.h
@@ -0,0 +1,35 @@
+// Copyright (c) 2002 Rob Kaper <[email protected]>
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// version 2 as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; see the file COPYING. If not, write to
+// the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+#ifndef SERVERSOCKET_H
+#define SERVERSOCKET_H
+
+#include <qserversocket.h>
+
+class AtlanticClient;
+
+class ServerSocket : public QServerSocket
+{
+Q_OBJECT
+
+public:
+ ServerSocket(int port, int backlog);
+ void newConnection(int socket);
+
+signals:
+ void newClient(AtlanticClient *client);
+};
+#endif