QString ServerListener::getTaskId() { QNetworkAccessManager* manager = new QNetworkAccessManager(); QEventLoop loop; QString taskId; connect(manager, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit())); connect( manager, &QNetworkAccessManager::finished, [&] (QNetworkReply* reply) { if (reply->error() != QNetworkReply::NoError) { reply->deleteLater(); throw ApiConnectionException(); } QByteArray bytes = reply->readAll(); taskId = QString::fromUtf8(bytes.data(), bytes.size()); reply->deleteLater(); } ); manager->get( QNetworkRequest(QUrl(ClientSettingsManager::getServerUrl() + "getTask?worker_id=" + ClientSettingsManager::getWorkerId())) ); loop.exec(); emit appendToOutput("Got task " + taskId); delete manager; return taskId; }
QString ServerListener::getTaskData(QString taskId) { QNetworkAccessManager* manager = new QNetworkAccessManager(); QEventLoop loop; QString filename; connect(manager, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit())); connect( manager, &QNetworkAccessManager::finished, [&] (QNetworkReply* reply) { filename = reply->rawHeader("X-File-Name"); QByteArray bytes = reply->readAll(); QFile file(filename); file.open(QIODevice::WriteOnly); file.write(bytes.data()); file.close(); reply->deleteLater(); } ); manager->get( QNetworkRequest(QUrl(ClientSettingsManager::getServerUrl() + "getData?worker_id=" + ClientSettingsManager::getWorkerId() + "&task_assignment_id=" + taskId)) ); loop.exec(); emit appendToOutput("Got data for task " + taskId); delete manager; return filename; }
void Preprocessor::parseMultiLineComment() { advance(2); setFirstOnLine(false); for (;;) { if (!hasMore()) { logError("%s:%u: Unexpected end of file in multi-line comment", files.back().name, files.back().line); throw Exception("Unexpected end of file in multi-line comment"); } if (c(0) == '*' && c(1) == '/') { advance(2); break; } else if (isNewLine()) parseNewLine(); else advance(1); } appendToOutput(); }
void Preprocessor::parse(const char* name, const char* text) { if (std::find(names.begin(), names.end(), name) != names.end()) return; files.push_back(File(name, text)); names.push_back(name); list += format("( file %u: %s )\n", (uint) names.size(), name); output.reserve(output.size() + std::strlen(text)); appendToOutput(format("#line 0 %u /* entering %s */\n", (uint) files.size(), files.back().name).c_str()); while (hasMore()) { if (isMultiLineComment()) parseMultiLineComment(); else if (isSingleLineComment()) parseSingleLineComment(); else if (isNewLine()) parseNewLine(); else if (isWhitespace()) parseWhitespace(); else if (isCommand()) parseCommand(); else { advance(1); appendToOutput(); setFirstOnLine(false); } } files.pop_back(); if (!files.empty()) { appendToOutput(format("\n#line %u %u /* returning to %s */", files.back().line, (uint) files.size(), files.back().name).c_str()); } }
void Preprocessor::parseNewLine() { if (c(0) == '\r' && c(1) == '\n') advance(2); else advance(1); addLine(); setFirstOnLine(true); appendToOutput(); }
int ServerListener::concurrentServerListener() { ServerListener::registerWorker(); while (true) { QString taskId = ""; try { taskId = ServerListener::getTaskId(); } catch (ApiConnectionException e) { emit appendToOutput("Cannot connect to API. Sleeping 5 min"); QThread::sleep(300); emit appendToOutput("Operational\n\n"); continue; } if (taskId == "no-task") { emit appendToOutput("No tasks. Sleeping 30 sec..."); QThread::sleep(30); emit appendToOutput("Operational\n\n"); continue; } QString scriptFilename = ServerListener::getTaskScript(taskId); QString dataFilename = ServerListener::getTaskData(taskId); QString outputFile = taskId + ".out.csv"; QString kernelPath = "remote_v8.exe"; QStringList kernelCallArguments; kernelCallArguments << scriptFilename << dataFilename << outputFile << "10" << "1000"; emit appendToOutput("Launching kernel..."); QProcess *kernel = new QProcess(); kernel->start(kernelPath, kernelCallArguments); emit appendToOutput("Computing..."); kernel->waitForFinished(-1); emit appendToOutput("Done!"); ServerListener::postTaskResults(taskId, outputFile); emit appendToOutput("Results uploaded\n\n"); emit incrementJobs(); qDebug() << taskId; qDebug() << scriptFilename; qDebug() << dataFilename; qDebug() << outputFile; } return 0; }
void Preprocessor::parseSingleLineComment() { advance(2); setFirstOnLine(false); while (hasMore()) { if (isNewLine()) break; else advance(1); } appendToOutput(); }
void Preprocessor::parseCommand() { advance(1); setFirstOnLine(false); passWhitespace(); const String command = passIdentifier(); if (command == "include") { passWhitespace(); const String name = passShaderName(); discard(); parse(name.c_str()); } else if (command == "version") { if (!version.empty()) { logError("%s:%u: Duplicate #version directive", files.back().name, files.back().line); throw Exception("Duplicate #version directive"); } passWhitespace(); version = passNumber(); discard(); } while (hasMore()) { if (isNewLine() || isSingleLineComment() || isMultiLineComment()) break; advance(1); } appendToOutput(); }
void PythonEditorWidget::onPyhonExecutionOutput(const std::string &msg,const PythonExecutionOutputStream &outputType) { appendToOutput(msg, outputType != sysstdout); LogInfo(msg); }
void Preprocessor::parseWhitespace() { passWhitespace(); appendToOutput(); }