-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathworker.cpp
74 lines (65 loc) · 1.92 KB
/
worker.cpp
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
71
72
73
74
#include <worker.h>
#include <QtCore/QtCore>
#include <QtSql/QtSql>
Worker::Worker(QObject *parent):
QObject(parent),
m_parent(parent),
m_scorer(0),
m_jobCount(0),
m_timer(new QTimer(this))
{
m_database = QSqlDatabase::addDatabase("QMYSQL");
m_database.setHostName("127.0.0.1");
m_database.setDatabaseName("codecrackerdb");
m_database.setUserName("virgin");
m_database.setPassword("mojito");
m_database.open();
connect(m_timer, SIGNAL(timeout()), this, SLOT(fetchJob()));
m_timer->start(1000);
}
Worker::~Worker()
{
m_database.close();
}
void Worker::setScorer(Scorer *scorer)
{
m_scorer = scorer;
}
void Worker::fetchJob()
{
qDebug() << "fetching jobs";
if (m_jobCount >= 3)
{
qDebug() << "too many jobs running";
return;
}
QSqlQuery query(QString("SELECT jobId, userId, problemId, compilerId, sourceCode FROM jobs WHERE status = 'new' LIMIT %1").arg(QString::number(3 - m_jobCount)));
while (query.next())
{
m_jobCount++;
QString jobId = query.value(0).toString();
QString userId = query.value(1).toString();
QString problemId = query.value(2).toString();
QString compilerId = query.value(3).toString();
QString sourceCode = query.value(4).toString();
Job *job = new Job(this);
connect(job, SIGNAL(finished()), this, SLOT(jobFinished()));
job->setId(jobId);
job->setUserId(userId);
job->setProblemId(problemId);
job->setCompilerId(compilerId);
job->setSourceCode(sourceCode);
job->start();
qDebug() << "job" << job->id() << "dispatched";
}
}
void Worker::jobFinished()
{
Job *finishedJob = qobject_cast<Job *>(QObject::sender());
qDebug() << "job " << finishedJob->id() << " successful , result = " << finishedJob->status();
if (m_scorer)
{
m_scorer->updateScore(finishedJob);
}
m_jobCount--;
}