diff options
author | sr | 2013-02-04 19:50:31 +0100 |
---|---|---|
committer | sr | 2013-02-04 19:50:31 +0100 |
commit | 1a5709501f94014d41987b956338bb6424b9f90c (patch) | |
tree | d3b93fe8dc406bca56aff147ef5cc4cbf9ed6be0 /src/server/net/listenserver.cpp | |
parent | Test (diff) | |
download | pvs2-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.cpp | 40 |
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); + } +} |