kopia lustrzana https://gitlab.com/eliggett/wfview
99 wiersze
2.4 KiB
C++
99 wiersze
2.4 KiB
C++
#include "tcpserver.h"
|
|
|
|
#include "logcategories.h"
|
|
|
|
tcpServer::tcpServer(QObject* parent) : QTcpServer(parent)
|
|
{
|
|
}
|
|
|
|
tcpServer::~tcpServer()
|
|
{
|
|
qInfo(logTcpServer()) << "closing tcpServer";
|
|
}
|
|
|
|
int tcpServer::startServer(qint16 port) {
|
|
|
|
if (!this->listen(QHostAddress::Any, port)) {
|
|
qInfo(logTcpServer()) << "could not start on port " << port;
|
|
return -1;
|
|
}
|
|
else
|
|
{
|
|
qInfo(logTcpServer()) << "started on port " << port;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void tcpServer::incomingConnection(qintptr socket) {
|
|
tcpServerClient* client = new tcpServerClient(socket, this);
|
|
connect(this, SIGNAL(onStopped()), client, SLOT(closeSocket()));
|
|
emit newClient(socket); // Signal par
|
|
}
|
|
|
|
void tcpServer::stopServer()
|
|
{
|
|
qInfo(logTcpServer()) << "stopping server";
|
|
emit onStopped();
|
|
}
|
|
|
|
|
|
void tcpServer::receiveDataFromClient(QByteArray data)
|
|
{
|
|
emit receiveData(data);
|
|
}
|
|
|
|
void tcpServer::sendData(QByteArray data) {
|
|
|
|
emit sendDataToClient(data);
|
|
|
|
}
|
|
|
|
tcpServerClient::tcpServerClient(int socketId, tcpServer* parent) : QObject(parent)
|
|
{
|
|
sessionId = socketId;
|
|
socket = new QTcpSocket(this);
|
|
this->parent = parent;
|
|
if (!socket->setSocketDescriptor(sessionId))
|
|
{
|
|
qInfo(logTcpServer()) << " error binding socket: " << sessionId;
|
|
return;
|
|
}
|
|
connect(socket, SIGNAL(readyRead()), this, SLOT(socketReadyRead()), Qt::DirectConnection);
|
|
connect(socket, SIGNAL(disconnected()), this, SLOT(socketDisconnected()), Qt::DirectConnection);
|
|
connect(parent, SIGNAL(sendDataToClient(QByteArray)), this, SLOT(receiveDataToClient(QByteArray)), Qt::DirectConnection);
|
|
connect(this, SIGNAL(sendDataFromClient(QByteArray)), parent, SLOT(receiveDataFromClient(QByteArray)), Qt::DirectConnection);
|
|
qInfo(logTcpServer()) << " session connected: " << sessionId;
|
|
|
|
}
|
|
|
|
void tcpServerClient::socketReadyRead() {
|
|
QByteArray data;
|
|
if (socket->bytesAvailable()) {
|
|
data=socket->readAll();
|
|
emit sendDataFromClient(data);
|
|
}
|
|
}
|
|
|
|
void tcpServerClient::socketDisconnected() {
|
|
qInfo(logTcpServer()) << sessionId << "disconnected";
|
|
socket->deleteLater();
|
|
this->deleteLater();
|
|
}
|
|
|
|
void tcpServerClient::closeSocket()
|
|
{
|
|
socket->close();
|
|
}
|
|
|
|
void tcpServerClient::receiveDataToClient(QByteArray data) {
|
|
|
|
if (socket != Q_NULLPTR && socket->isValid() && socket->isOpen())
|
|
{
|
|
socket->write(data);
|
|
}
|
|
else
|
|
{
|
|
qInfo(logTcpServer()) << "socket not open!";
|
|
}
|
|
} |