From 5e351b7783e5ad135b6918b5f5d92d78723a4a04 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Fri, 29 Apr 2022 17:44:19 +0200 Subject: Add client socket support for 'html-cast' functionality to thin client. --- src/client.cc | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/client.cc (limited to 'src/client.cc') diff --git a/src/client.cc b/src/client.cc new file mode 100644 index 0000000..bcc7958 --- /dev/null +++ b/src/client.cc @@ -0,0 +1,77 @@ +#include "client.h" + +#include +#include + +Client::Client(QObject *parent) + : QObject(parent) +{ + socket = new QTcpSocket(this); + connect(socket, &QTcpSocket::errorOccurred, + this, &Client::errorOccurred); + connect(socket, &QTcpSocket::connected, + this, &Client::connected); + connect(socket, &QTcpSocket::disconnected, + this, &Client::disconnected); + + timer = new QTimer(this); + timer->setSingleShot(true); + connect(timer, &QTimer::timeout, this, &Client::timeout); +} + +bool Client::connectToHost(const QString& host) +{ + this->host = host; + retryConnect(); + return true; +} + +bool Client::writeData(const QByteArray& data) +{ + if(socket->state() != QAbstractSocket::ConnectedState) + { + return false; + } + + socket->write(data); + return socket->waitForBytesWritten(100); // wait at most 100ms +} + +void Client::errorOccurred(QAbstractSocket::SocketError socketError) +{ + if(socketError == QAbstractSocket::NetworkError || + socketError == QAbstractSocket::ConnectionRefusedError) + { + if(retries > 0) + { + timer->setInterval(interval * 1000); + retries--; + } + else + { + timer->setInterval(interval_long * 1000); + } + timer->start(); + } +} + +void Client::connected() +{ + emit isConnected(); +} + +void Client::disconnected() +{ + emit isDisconnected(); + retryConnect(); +} + +void Client::timeout() +{ + retryConnect(); +} + +void Client::retryConnect() +{ + socket->connectToHost(host, 1024); +} -- cgit v1.2.3