From 0243cbe0170a768f8f8998c6f7f234869c8c77e6 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sat, 30 Apr 2022 10:06:28 +0200 Subject: Add 4-byte size arg to socket payload. Add qookie-cast client (server really) with receiving socket. --- src/qookie-cast-client.cc | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/qookie-cast-client.cc (limited to 'src/qookie-cast-client.cc') diff --git a/src/qookie-cast-client.cc b/src/qookie-cast-client.cc new file mode 100644 index 0000000..93e04c9 --- /dev/null +++ b/src/qookie-cast-client.cc @@ -0,0 +1,70 @@ +#include "qookie-cast-client.h" + +#include + +#include + +Server::Server(WebView& webview, QObject *parent) + : QObject(parent) + , webview(webview) +{ + server = new QTcpServer(this); + connect(server, SIGNAL(newConnection()), SLOT(newConnection())); + server->listen(QHostAddress::Any, 1024); +} + +void Server::newConnection() +{ + size = -1; + html = ""; + + while (server->hasPendingConnections()) + { + QTcpSocket *socket = server->nextPendingConnection(); + connect(socket, SIGNAL(readyRead()), SLOT(readyRead())); + connect(socket, SIGNAL(disconnected()), SLOT(disconnected())); + } +} + +void Server::disconnected() +{ + QTcpSocket *socket = static_cast(sender()); + socket->deleteLater(); +} + +void Server::readyRead() +{ + QTcpSocket *socket = static_cast(sender()); + + if(size < 0) + { + std::uint32_t sz; + socket->read((char*)&sz, sizeof(std::uint32_t)); + size = sz; + } + + while (socket->bytesAvailable() > 0) + { + auto data = socket->readAll(); + html.append(QString::fromUtf8(data)); + size -= data.size(); + } + + if(size <= 0) + { + webview.setHtml(html); + size = -1; + html = ""; + } +} + +int main(int argc, char *argv[]) +{ + QApplication qapp(argc, argv); + WebView webview; + webview.show();//Maximized(); + + Server server(webview); + + return qapp.exec(); +} -- cgit v1.2.3