History

make QTimers in ThreadedAssignment not be raw pointers

Stephen Birarda committed 10 years ago

Commit 49ea5601 parent f5f08292 files · +23 −50Browse files

Showing the changes to libraries/networking/src/ThreadedAssignment.cpp (1 of 2 files). Show all

Unified · Split

libraries/networking/src/ThreadedAssignment.cpp+20−45
@@ -20,10 +20,16 @@ · 19 unmodified lines
20 20
21ThreadedAssignment::ThreadedAssignment(ReceivedMessage& message) :21ThreadedAssignment::ThreadedAssignment(ReceivedMessage& message) :
22 Assignment(message),22 Assignment(message),
23 _isFinished(false)23 _isFinished(false),
24 24 _domainServerTimer(this),
25 _statsTimer(this)
25{26{
27 static const int STATS_TIMEOUT_MS = 1000;
28 _statsTimer.setInterval(STATS_TIMEOUT_MS);
29 connect(&_statsTimer, &QTimer::timeout, this, &ThreadedAssignment::sendStatsPacket);
26 30
31 connect(&_domainServerTimer, &QTimer::timeout, this, &ThreadedAssignment::checkInWithDomainServerOrExit);
32 _domainServerTimer.setInterval(DOMAIN_SERVER_CHECK_IN_MSECS);
27}33}
28 34
29void ThreadedAssignment::setFinished(bool isFinished) {35void ThreadedAssignment::setFinished(bool isFinished) {
@@ -47,16 +53,10 @@ void ThreadedAssignment::setFinished(bool isFinished) { · 17 unmodified lines
47 // send a disconnect packet to the domain53 // send a disconnect packet to the domain
48 nodeList->getDomainHandler().disconnect();54 nodeList->getDomainHandler().disconnect();
49 55
50 if (_domainServerTimer) {56 // stop our owned timers
51 // stop the domain-server check in timer by calling deleteLater so it gets cleaned up on NL thread
52 _domainServerTimer->deleteLater();
53 _domainServerTimer = nullptr;
54 }
55 57
56 if (_statsTimer) {58 _domainServerTimer.stop();
57 _statsTimer->deleteLater();59 _statsTimer.stop();
58 _statsTimer = nullptr;
59 }
60 60
61 // call our virtual aboutToFinish method - this gives the ThreadedAssignment subclass a chance to cleanup61 // call our virtual aboutToFinish method - this gives the ThreadedAssignment subclass a chance to cleanup
62 aboutToFinish();62 aboutToFinish();
@@ -66,30 +66,21 @@ void ThreadedAssignment::setFinished(bool isFinished) { · 3 unmodified lines
66 }66 }
67}67}
68 68
69void ThreadedAssignment::commonInit(const QString& targetName, NodeType_t nodeType, bool shouldSendStats) {69void ThreadedAssignment::commonInit(const QString& targetName, NodeType_t nodeType) {
70 // change the logging target name while the assignment is running70 // change the logging target name while the assignment is running
71 LogHandler::getInstance().setTargetName(targetName);71 LogHandler::getInstance().setTargetName(targetName);
72 72
73 auto nodeList = DependencyManager::get<NodeList>();73 auto nodeList = DependencyManager::get<NodeList>();
74 nodeList->setOwnerType(nodeType);74 nodeList->setOwnerType(nodeType);
75 75
76 _domainServerTimer = new QTimer;
77 connect(_domainServerTimer, SIGNAL(timeout()), this, SLOT(checkInWithDomainServerOrExit()));
78 _domainServerTimer->start(DOMAIN_SERVER_CHECK_IN_MSECS);
79
80 // send a domain-server check in immediately76 // send a domain-server check in immediately
81 checkInWithDomainServerOrExit();77 checkInWithDomainServerOrExit();
82 78
83 // move the domain server time to the NL so check-ins fire from there79 // start sending stats packet once we connect to the domain
84 _domainServerTimer->moveToThread(nodeList->thread());80 connect(&nodeList->getDomainHandler(), SIGNAL(connectedToDomain()), &_statsTimer, SLOT(start()));
85 81
86 if (shouldSendStats) {82 // stop sending stats if we disconnect
87 // start sending stats packet once we connect to the domain83 connect(&nodeList->getDomainHandler(), &DomainHandler::disconnectedFromDomain, &_statsTimer, &QTimer::stop);
88 connect(&nodeList->getDomainHandler(), &DomainHandler::connectedToDomain, this, &ThreadedAssignment::startSendingStats);
89
90 // stop sending stats if we disconnect
91 connect(&nodeList->getDomainHandler(), &DomainHandler::disconnectedFromDomain, this, &ThreadedAssignment::stopSendingStats);
92 }
93}84}
94 85
95void ThreadedAssignment::addPacketStatsAndSendStatsPacket(QJsonObject &statsObject) {86void ThreadedAssignment::addPacketStatsAndSendStatsPacket(QJsonObject &statsObject) {
@@ -111,28 +102,12 @@ void ThreadedAssignment::sendStatsPacket() { · 15 unmodified lines
111 addPacketStatsAndSendStatsPacket(statsObject);102 addPacketStatsAndSendStatsPacket(statsObject);
112}103}
113 104
114void ThreadedAssignment::startSendingStats() {
115 // send the stats packet every 1s
116 if (!_statsTimer) {
117 _statsTimer = new QTimer;
118 connect(_statsTimer, &QTimer::timeout, this, &ThreadedAssignment::sendStatsPacket);
119 }
120
121 _statsTimer->start(1000);
122}
123
124void ThreadedAssignment::stopSendingStats() {
125 if (_statsTimer) {
126 // stop sending stats, we just disconnected from domain
127 _statsTimer->stop();
128 }
129}
130
131void ThreadedAssignment::checkInWithDomainServerOrExit() {105void ThreadedAssignment::checkInWithDomainServerOrExit() {
132 if (DependencyManager::get<NodeList>()->getNumNoReplyDomainCheckIns() == MAX_SILENT_DOMAIN_SERVER_CHECK_INS) {106 if (DependencyManager::get<NodeList>()->getNumNoReplyDomainCheckIns() == MAX_SILENT_DOMAIN_SERVER_CHECK_INS) {
133 setFinished(true);107 setFinished(true);
134 } else {108 } else {
135 DependencyManager::get<NodeList>()->sendDomainServerCheckIn();109 auto nodeList = DependencyManager::get<NodeList>();
110 QMetaObject::invokeMethod(nodeList.data(), "sendDomainServerCheckIn");
136 }111 }
137}112}
138 113