summaryrefslogtreecommitdiffstats
path: root/src/server/net/listenserver.cpp
diff options
context:
space:
mode:
authorsr2013-02-04 19:50:31 +0100
committersr2013-02-04 19:50:31 +0100
commit1a5709501f94014d41987b956338bb6424b9f90c (patch)
treed3b93fe8dc406bca56aff147ef5cc4cbf9ed6be0 /src/server/net/listenserver.cpp
parentTest (diff)
downloadpvs2-1a5709501f94014d41987b956338bb6424b9f90c.tar.gz
pvs2-1a5709501f94014d41987b956338bb6424b9f90c.tar.xz
pvs2-1a5709501f94014d41987b956338bb6424b9f90c.zip
Initial commit
Diffstat (limited to 'src/server/net/listenserver.cpp')
-rw-r--r--src/server/net/listenserver.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/server/net/listenserver.cpp b/src/server/net/listenserver.cpp
new file mode 100644
index 0000000..706962d
--- /dev/null
+++ b/src/server/net/listenserver.cpp
@@ -0,0 +1,40 @@
+#include "listenserver.h"
+#include "client.h"
+#include <QSslSocket>
+
+#define MAX_CLIENTS 50
+
+ListenServer::ListenServer(quint16 port)
+{
+ if (!_server.listen(QHostAddress::Any, port) || !_server.isListening())
+ qFatal("Cannot bind to TCP port %d (incoming SSL clients)", (int)port);
+ connect(&_server, SIGNAL(newConnection()), this, SLOT(newClientConnection()));
+}
+
+ListenServer::~ListenServer()
+{
+ _server.close();
+ for (int i = 0; i < _clients.size(); ++i)
+ _clients[i]->deleteLater();
+}
+
+/**
+ * Slots
+ */
+
+void ListenServer::newClientConnection()
+{
+ QSslSocket* sock;
+ while ((sock = (QSslSocket*)_server.nextPendingConnection()) != NULL)
+ {
+ if (_clients.size() >= MAX_CLIENTS)
+ {
+ sock->abort();
+ sock->deleteLater();
+ continue;
+ }
+ Client* client = new Client(sock);
+ _clients.append(client); // create new client class and add to list
+ emit newClient(client);
+ }
+}