#include "TcpServerBase.h"
TcpServerBase::TcpServerBase(QObject *parent) : QObject(parent), m_server(nullptr)
{
m_server = new QTcpServer(this);
connect(m_server, &QTcpServer::newConnection, this, &TcpServerBase::onNewConnection);
}
bool TcpServerBase::start(quint16 port)
{
if (!m_server->listen(QHostAddress::Any, port)) {
return false;
}
return true;
}
void TcpServerBase::stop()
{
m_server->close();
//qDeleteAll(m_clients);
//m_clients.clear();
}
void TcpServerBase::onNewConnection()
{
while (m_server->hasPendingConnections()) {
QTcpSocket *client = m_server->nextPendingConnection();
//m_clients.append(client);
connect(client, &QTcpSocket::disconnected, this, &TcpServerBase::onClientDisconnected);
connect(client, &QTcpSocket::readyRead, this, &TcpServerBase::onReadyRead);
connect(client, &QTcpSocket::bytesWritten, this, &TcpServerBase::onBytesWritten);
emit clientConnected(client);
}
}
void TcpServerBase::onClientDisconnected()
{
QTcpSocket *client = qobject_cast<QTcpSocket*>(sender());
if (client) {
//m_clients.removeOne(client);
//client->deleteLater();
emit clientDisconnected(client);
}
}
void TcpServerBase::onReadyRead()
{
QTcpSocket *client = qobject_cast<QTcpSocket*>(sender());
if (client) {
emit readyRead(client);
}
}
void TcpServerBase::onBytesWritten(qint64 bytes)
{
QTcpSocket *client = qobject_cast<QTcpSocket*>(sender());
if (client) {
emit bytesWritten(client, bytes);
}
}