-
Notifications
You must be signed in to change notification settings - Fork 0
/
waitscenarios.cpp
131 lines (99 loc) · 3.75 KB
/
waitscenarios.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <QTcpServer>
#include "CommandController.h"
#include "ProjectorQuery.h"
#include <QEventLoop>
#include <QTimer>
#include <QProcess>
#include <QThread>
#include <QMap>
TCmdButton waitForTimeoutOrCancelCmd(int secTimeout)
{
extern CommandController cmdCtl;
QEventLoop el;
QMetaObject::Connection m_conn1, m_conn2;
m_conn1 = QObject::connect(&cmdCtl, &CommandController::buttonCancel, [&el]() { el.exit(cmdButtonCancel); });
QTimer timer;
timer.setSingleShot(true);
timer.setInterval(secTimeout * 1000);
m_conn2 = QObject::connect(&timer, &QTimer::timeout, [&el]() { el.exit(cmdTimeout); });
timer.start();
TCmdButton ret = (TCmdButton)el.exec();
QObject::disconnect(m_conn1);
QObject::disconnect(m_conn2);
return ret;
}
//0 - exit on finish, 1 - exit on cancel
TCmdButton waitForFinishPlayOrCancel(QProcess *videoPlayer)
{
//extern QProcess videoPlayer;
extern CommandController cmdCtl;
QEventLoop el;
QMetaObject::Connection m_conn1, m_conn2;
m_conn1 = QObject::connect(&cmdCtl, &CommandController::buttonCancel, [&el]() { el.exit(cmdButtonCancel); });
//QObject::connect((QObject*)&videoPlayer, &QProcess::finished, [&el]() { el.exit(0); });
m_conn2 = QObject::connect(videoPlayer, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
[&el](int exitCode, QProcess::ExitStatus exitStatus){ qDebug() <<"video finished signal exit code " << exitCode; el.exit(cmdFinished); });
TCmdButton ret = (TCmdButton)el.exec();
QObject::disconnect(m_conn1);
QObject::disconnect(m_conn2);
return ret;
}
TCmdButton waitForBut1CmdOrBut2Cmd()
{
extern CommandController cmdCtl;
QEventLoop el;
QMetaObject::Connection m_conn1, m_conn2;
m_conn1 = QObject::connect(&cmdCtl, &CommandController::button1, [&el]() { el.exit(cmdButton1); });
m_conn2 = QObject::connect(&cmdCtl, &CommandController::button2, [&el]() { el.exit(cmdButton2); });
TCmdButton ret = (TCmdButton)el.exec();
QObject::disconnect(m_conn1);
QObject::disconnect(m_conn2);
return ret;
}
TCmdButton waitForProjectorsStateOrCancel(QList<ProjectorQuery*> &pqList, TProjState stateWaitFor)
{
QMap<int, QString> projStateName;
projStateName[onState] = "On";
projStateName[offState] = "Off";
projStateName[coolingState] = "Cooling";
projStateName[warmUpState] = "WarmUp";
extern CommandController cmdCtl;
QEventLoop el;
QMetaObject::Connection m_conn1, m_conn2;
m_conn1 = QObject::connect(&cmdCtl, &CommandController::buttonCancel, [&el]() { el.exit(cmdButtonCancel); });
TCmdButton ret;
foreach (ProjectorQuery* pq, pqList) {
TProjState ps = pq->getState();
if(ps == stateWaitFor){
ret = cmdFinished;
qInfo() << "proj" << pq->ip << "in state"<< projStateName[ps] <<". Nothing to do.";
}
else{
qInfo() << "proj" << pq->ip << "in state"<< projStateName[ps] <<". Changing state.";
if(stateWaitFor == offState)
pq->off();
else if(stateWaitFor == onState)
pq->on();
}
}
foreach (ProjectorQuery* pq, pqList) {
qInfo() << "wait for proj" << pq->ip ;
if(stateWaitFor == offState){
TProjState state = pq->getState();
while( ((state == offState) || (state == coolingState)) == false){
state = pq->getState();
QThread::msleep(250);
}
}
else{
while(pq->getState() != stateWaitFor){
if(stateWaitFor == onState)
pq->on();
QThread::msleep(250);
}
}
ret = cmdFinished;
}
QObject::disconnect(m_conn1);
return ret;
}