2022-10-01 17:10:44 +02:00
|
|
|
#include "tcpserver.h"
|
|
|
|
|
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
|
|
|
|
|
TCPServer::TCPServer(int port)
|
|
|
|
|
{
|
2024-06-20 14:40:06 +02:00
|
|
|
this->port = port;
|
2022-10-01 17:10:44 +02:00
|
|
|
qInfo() << "Listening on port" << port;
|
|
|
|
|
socket = nullptr;
|
|
|
|
|
server.listen(QHostAddress::Any, port);
|
|
|
|
|
connect(&server, &QTcpServer::newConnection, [&](){
|
|
|
|
|
// only one connection at a time
|
|
|
|
|
delete socket;
|
|
|
|
|
socket = server.nextPendingConnection();
|
|
|
|
|
connect(socket, &QTcpSocket::readyRead, [=](){
|
2024-04-10 20:00:15 +02:00
|
|
|
while(socket->canReadLine()) {
|
2022-10-01 17:10:44 +02:00
|
|
|
auto available = socket->bytesAvailable();
|
|
|
|
|
char data[available+1];
|
|
|
|
|
socket->readLine(data, sizeof(data));
|
|
|
|
|
auto line = QString(data);
|
|
|
|
|
emit received(line.trimmed());
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
connect(socket, &QTcpSocket::stateChanged, [&](QAbstractSocket::SocketState state){
|
|
|
|
|
if (state == QAbstractSocket::UnconnectedState)
|
|
|
|
|
{
|
|
|
|
|
socket->deleteLater();
|
|
|
|
|
socket = nullptr;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool TCPServer::send(QString line)
|
|
|
|
|
{
|
|
|
|
|
if (socket) {
|
|
|
|
|
socket->write(QByteArray::fromStdString(line.toStdString()+'\n'));
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|