summaryrefslogtreecommitdiff
path: root/src/qookie-cast-client.cc
blob: 93e04c927fa9b826d49e964aabc67927241be198 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "qookie-cast-client.h"

#include <cstdint>

#include <QApplication>

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<QTcpSocket*>(sender());
	socket->deleteLater();
}

void Server::readyRead()
{
	QTcpSocket *socket = static_cast<QTcpSocket*>(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();
}