diff options
| -rw-r--r-- | Makefile | 6 | ||||
| -rw-r--r-- | ctor.cc | 27 | ||||
| -rw-r--r-- | src/client.cc | 4 | ||||
| -rw-r--r-- | src/qookie-cast-client.cc | 70 | ||||
| -rw-r--r-- | src/qookie-cast-client.h | 34 | 
5 files changed, 141 insertions, 0 deletions
| diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7689431 --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +CXXFLAGS=-I/usr/include/qt4/QtWidgets -I/usr/include/qt4/QtCore/ -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtNetwork -I/usr/include/qt4 -fPIC -I/usr/include/qt4/QtWebKit +LIBS=-L/usr/lib/qt4 -lQtCore -lQtNetwork -lQtGui -lQtWebKit +all: qookie-cast-client + +qookie-cast-client: src/qookie-cast-client.cc +	g++ qookie-cast-client.cc moc_qookie-cast-client.cc $(CXXFLAGS) $(LIBS) -o qookie-cast-client @@ -40,6 +40,33 @@ BuildConfigurations myConfigs()  					"-lsqlite3",  				}  			}, +		}, +		{ +			.target = "qookie-cast-client",  // output filename +			.sources = { +				"src/qookie-cast-client.cc", +				"src/moc_qookie-cast-client.cc", +			}, +			.flags = { +				.cxxflags = { +					"-I/usr/include/qt5", +					"-I/usr/include/qt5/QtCore", +					"-I/usr/include/qt5/QtGui", +					"-I/usr/include/qt5/QtWidgets", +					"-I/usr/include/qt5/QtNetwork", +					"-I/usr/include/qt5/QtWebKit", +					"-fPIC", +					"-Wall", "-Werror", "-Wextra",// "-Wconversion", +					"-g", +				}, +				.ldflags = { +					"-lQt5Core", +					"-lQt5Network", +					"-lQt5Gui", +					"-lQt5Widgets", +//					"-lQt5WebKit", +				} +			},  		}  	};  } diff --git a/src/client.cc b/src/client.cc index bcc7958..4d1bb7f 100644 --- a/src/client.cc +++ b/src/client.cc @@ -1,5 +1,7 @@  #include "client.h" +#include <cstdint> +  #include <QTcpSocket>  #include <QTimer> @@ -33,6 +35,8 @@ bool Client::writeData(const QByteArray& data)  		return false;  	} +	std::uint32_t size = data.size(); +	socket->write((char*)&size, sizeof(std::uint32_t));  	socket->write(data);  	return socket->waitForBytesWritten(100); // wait at most 100ms  } 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 <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(); +} diff --git a/src/qookie-cast-client.h b/src/qookie-cast-client.h new file mode 100644 index 0000000..766b48b --- /dev/null +++ b/src/qookie-cast-client.h @@ -0,0 +1,34 @@ +// -*- c++ -*- +#include <QtCore> +#include <QtNetwork> + +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) +// Qt4 support +#include <QWebView> +using WebView = QWebView; +#else +#include <QTextEdit> +using WebView = QTextEdit; +#endif + +class Server +	: public QObject +{ +	Q_OBJECT +public: +	Server(WebView& webview, QObject *parent = 0); + +signals: +	void dataReceived(QByteArray); + +private slots: +	void newConnection(); +	void disconnected(); +	void readyRead(); + +private: +	QTcpServer *server; +	WebView& webview; +	QString html; +	int size{-1}; +}; | 
