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
2020
2121 ThreadedAssignment::ThreadedAssignment(ReceivedMessage& message) :
2222 Assignment(message),
23− _isFinished(false)
24−
23+ _isFinished(false),
24+ _domainServerTimer(this),
25+ _statsTimer(this)
2526 {
27+ static const int STATS_TIMEOUT_MS = 1000;
28+ _statsTimer.setInterval(STATS_TIMEOUT_MS);
29+ connect(&_statsTimer, &QTimer::timeout, this, &ThreadedAssignment::sendStatsPacket);
2630
31+ connect(&_domainServerTimer, &QTimer::timeout, this, &ThreadedAssignment::checkInWithDomainServerOrExit);
32+ _domainServerTimer.setInterval(DOMAIN_SERVER_CHECK_IN_MSECS);
2733 }
2834
2935 void ThreadedAssignment::setFinished(bool isFinished) {
@@ -47,16 +53,10 @@ void ThreadedAssignment::setFinished(bool isFinished) { · 17 unmodified lines
4753 // send a disconnect packet to the domain
4854 nodeList->getDomainHandler().disconnect();
4955
50− if (_domainServerTimer) {
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− }
56+ // stop our owned timers
5557
56− if (_statsTimer) {
57− _statsTimer->deleteLater();
58− _statsTimer = nullptr;
59− }
58+ _domainServerTimer.stop();
59+ _statsTimer.stop();
6060
6161 // call our virtual aboutToFinish method - this gives the ThreadedAssignment subclass a chance to cleanup
6262 aboutToFinish();
@@ -66,30 +66,21 @@ void ThreadedAssignment::setFinished(bool isFinished) { · 3 unmodified lines
6666 }
6767 }
6868
69−void ThreadedAssignment::commonInit(const QString& targetName, NodeType_t nodeType, bool shouldSendStats) {
69+void ThreadedAssignment::commonInit(const QString& targetName, NodeType_t nodeType) {
7070 // change the logging target name while the assignment is running
7171 LogHandler::getInstance().setTargetName(targetName);
7272
7373 auto nodeList = DependencyManager::get<NodeList>();
7474 nodeList->setOwnerType(nodeType);
7575
76− _domainServerTimer = new QTimer;
77− connect(_domainServerTimer, SIGNAL(timeout()), this, SLOT(checkInWithDomainServerOrExit()));
78− _domainServerTimer->start(DOMAIN_SERVER_CHECK_IN_MSECS);
79−
8076 // send a domain-server check in immediately
8177 checkInWithDomainServerOrExit();
82−
83− // move the domain server time to the NL so check-ins fire from there
84− _domainServerTimer->moveToThread(nodeList->thread());
85−
86− if (shouldSendStats) {
87− // start sending stats packet once we connect to the domain
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− }
78+
79+ // start sending stats packet once we connect to the domain
80+ connect(&nodeList->getDomainHandler(), SIGNAL(connectedToDomain()), &_statsTimer, SLOT(start()));
81+
82+ // stop sending stats if we disconnect
83+ connect(&nodeList->getDomainHandler(), &DomainHandler::disconnectedFromDomain, &_statsTimer, &QTimer::stop);
9384 }
9485
9586 void ThreadedAssignment::addPacketStatsAndSendStatsPacket(QJsonObject &statsObject) {
@@ -111,28 +102,12 @@ void ThreadedAssignment::sendStatsPacket() { · 15 unmodified lines
111102 addPacketStatsAndSendStatsPacket(statsObject);
112103 }
113104
114−void 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−
124−void ThreadedAssignment::stopSendingStats() {
125− if (_statsTimer) {
126− // stop sending stats, we just disconnected from domain
127− _statsTimer->stop();
128− }
129−}
130−
131105 void ThreadedAssignment::checkInWithDomainServerOrExit() {
132106 if (DependencyManager::get<NodeList>()->getNumNoReplyDomainCheckIns() == MAX_SILENT_DOMAIN_SERVER_CHECK_INS) {
133107 setFinished(true);
134108 } else {
135− DependencyManager::get<NodeList>()->sendDomainServerCheckIn();
109+ auto nodeList = DependencyManager::get<NodeList>();
110+ QMetaObject::invokeMethod(nodeList.data(), "sendDomainServerCheckIn");
136111 }
137112 }
138113