summaryrefslogblamecommitdiffstats
path: root/src/server/net/listenserver.cpp
blob: d7c269339151f4ef273e5c12676284a635dffbdf (plain) (tree)



















                                                                                       
  


















                                                                                   
#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);
	}
}