Organize Linux and macOS as separate applications
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
#include "../src/MapWidget.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QElapsedTimer>
|
||||
#include <QHostAddress>
|
||||
#include <QSet>
|
||||
#include <QTcpServer>
|
||||
#include <QTcpSocket>
|
||||
#include <QThread>
|
||||
|
||||
#include <cassert>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
|
||||
QTcpServer tileServer;
|
||||
assert(tileServer.listen(QHostAddress::LocalHost, 0));
|
||||
|
||||
int requestCount = 0;
|
||||
QSet<QByteArray> requestedPaths;
|
||||
QObject::connect(&tileServer, &QTcpServer::newConnection, [&]() {
|
||||
while (tileServer.hasPendingConnections()) {
|
||||
QTcpSocket *socket = tileServer.nextPendingConnection();
|
||||
const auto respond = [&, socket]() {
|
||||
if (!socket->canReadLine()) {
|
||||
return;
|
||||
}
|
||||
const QByteArray requestLine = socket->readLine().trimmed();
|
||||
const QList<QByteArray> fields = requestLine.split(' ');
|
||||
if (fields.size() >= 2) {
|
||||
++requestCount;
|
||||
requestedPaths.insert(fields[1]);
|
||||
}
|
||||
socket->readAll();
|
||||
socket->write("HTTP/1.1 503 Service Unavailable\r\n"
|
||||
"Content-Length: 0\r\n"
|
||||
"Connection: close\r\n\r\n");
|
||||
socket->disconnectFromHost();
|
||||
};
|
||||
QObject::connect(socket, &QTcpSocket::readyRead, socket, respond);
|
||||
QObject::connect(socket, &QTcpSocket::disconnected,
|
||||
socket, &QObject::deleteLater);
|
||||
respond();
|
||||
}
|
||||
});
|
||||
|
||||
const QByteArray tileUrl = QByteArray("http://127.0.0.1:")
|
||||
+ QByteArray::number(tileServer.serverPort()) + "/{z}/{x}/{y}.png";
|
||||
qputenv("LOCATION_PLOTTER_TILE_URL_TEMPLATE", tileUrl);
|
||||
|
||||
{
|
||||
MapWidget map;
|
||||
map.resize(640, 480);
|
||||
map.show();
|
||||
|
||||
QElapsedTimer timer;
|
||||
timer.start();
|
||||
while (timer.elapsed() < 1200) {
|
||||
app.processEvents(QEventLoop::AllEvents, 50);
|
||||
QThread::msleep(5);
|
||||
}
|
||||
|
||||
// Every URL fails. Seeing any URL more than once proves that a failed
|
||||
// tile schedules a new paint/request instead of remaining a blank
|
||||
// placeholder forever.
|
||||
assert(!requestedPaths.isEmpty());
|
||||
assert(requestCount > requestedPaths.size());
|
||||
}
|
||||
|
||||
qunsetenv("LOCATION_PLOTTER_TILE_URL_TEMPLATE");
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user