Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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();
}
Ejemplo n.º 4
0
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());
  }
}
Ejemplo n.º 5
0
void Preprocessor::parseNewLine()
{
  if (c(0) == '\r' && c(1) == '\n')
    advance(2);
  else
    advance(1);

  addLine();
  setFirstOnLine(true);
  appendToOutput();
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 7
0
void Preprocessor::parseSingleLineComment()
{
  advance(2);
  setFirstOnLine(false);

  while (hasMore())
  {
    if (isNewLine())
      break;
    else
      advance(1);
  }

  appendToOutput();
}
Ejemplo n.º 8
0
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();
}
Ejemplo n.º 9
0
void PythonEditorWidget::onPyhonExecutionOutput(const std::string &msg,const  PythonExecutionOutputStream &outputType) {
    appendToOutput(msg, outputType != sysstdout);
    LogInfo(msg);
}
Ejemplo n.º 10
0
void Preprocessor::parseWhitespace()
{
  passWhitespace();
  appendToOutput();
}