diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2022-04-29 17:44:19 +0200 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2022-05-26 18:41:21 +0200 |
commit | 5e351b7783e5ad135b6918b5f5d92d78723a4a04 (patch) | |
tree | 6af5e4242d424c40425c1d9a80f886c4b3c820d7 /src/client.cc | |
parent | 006f0286fd5fbd9655391b3c0ad10a7d000fd907 (diff) |
Add client socket support for 'html-cast' functionality to thin client.
Diffstat (limited to 'src/client.cc')
-rw-r--r-- | src/client.cc | 77 |
1 files changed, 77 insertions, 0 deletions
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 <QTcpSocket> +#include <QTimer> + +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); +} |