18
18
#include < SharedUtil.h>
19
19
20
20
#include " AssignmentFactory.h"
21
+ #include " AssignmentThread.h"
21
22
22
23
#include " AssignmentClient.h"
23
24
@@ -28,7 +29,7 @@ int hifiSockAddrMeta = qRegisterMetaType<HifiSockAddr>("HifiSockAddr");
28
29
29
30
AssignmentClient::AssignmentClient (int &argc, char **argv) :
30
31
QCoreApplication(argc, argv),
31
- _currentAssignment(NULL )
32
+ _currentAssignment()
32
33
{
33
34
setOrganizationName (" High Fidelity" );
34
35
setOrganizationDomain (" highfidelity.io" );
@@ -124,7 +125,7 @@ void AssignmentClient::readPendingDatagrams() {
124
125
if (nodeList->packetVersionAndHashMatch (receivedPacket)) {
125
126
if (packetTypeForPacket (receivedPacket) == PacketTypeCreateAssignment) {
126
127
// construct the deployed assignment from the packet data
127
- _currentAssignment = AssignmentFactory::unpackAssignment (receivedPacket);
128
+ _currentAssignment = SharedAssignmentPointer ( AssignmentFactory::unpackAssignment (receivedPacket) );
128
129
129
130
if (_currentAssignment) {
130
131
qDebug () << " Received an assignment -" << *_currentAssignment;
@@ -137,14 +138,13 @@ void AssignmentClient::readPendingDatagrams() {
137
138
qDebug () << " Destination IP for assignment is" << nodeList->getDomainInfo ().getIP ().toString ();
138
139
139
140
// start the deployed assignment
140
- QThread * workerThread = new QThread ( this );
141
+ AssignmentThread * workerThread = new AssignmentThread (_currentAssignment, this );
141
142
142
- connect (workerThread, SIGNAL (started ()), _currentAssignment, SLOT (run ()));
143
-
144
- connect (_currentAssignment, SIGNAL (finished ()), this , SLOT (assignmentCompleted ()));
145
- connect (_currentAssignment, SIGNAL (finished ()), workerThread, SLOT (quit ()));
146
- connect (_currentAssignment, SIGNAL (finished ()), _currentAssignment, SLOT (deleteLater ()));
147
- connect (workerThread, SIGNAL (finished ()), workerThread, SLOT (deleteLater ()));
143
+ connect (workerThread, &QThread::started, _currentAssignment.data (), &ThreadedAssignment::run);
144
+ connect (_currentAssignment.data (), &ThreadedAssignment::finished, workerThread, &QThread::quit);
145
+ connect (_currentAssignment.data (), &ThreadedAssignment::finished,
146
+ this , &AssignmentClient::assignmentCompleted);
147
+ connect (workerThread, &QThread::finished, workerThread, &QThread::deleteLater);
148
148
149
149
_currentAssignment->moveToThread (workerThread);
150
150
@@ -153,7 +153,7 @@ void AssignmentClient::readPendingDatagrams() {
153
153
154
154
// let the assignment handle the incoming datagrams for its duration
155
155
disconnect (&nodeList->getNodeSocket (), 0 , this , 0 );
156
- connect (&nodeList->getNodeSocket (), &QUdpSocket::readyRead, _currentAssignment,
156
+ connect (&nodeList->getNodeSocket (), &QUdpSocket::readyRead, _currentAssignment. data () ,
157
157
&ThreadedAssignment::readPendingDatagrams);
158
158
159
159
// Starts an event loop, and emits workerThread->started()
@@ -202,10 +202,12 @@ void AssignmentClient::assignmentCompleted() {
202
202
NodeList* nodeList = NodeList::getInstance ();
203
203
204
204
// have us handle incoming NodeList datagrams again
205
- disconnect (&nodeList->getNodeSocket (), 0 , _currentAssignment, 0 );
205
+ disconnect (&nodeList->getNodeSocket (), 0 , _currentAssignment. data () , 0 );
206
206
connect (&nodeList->getNodeSocket (), &QUdpSocket::readyRead, this , &AssignmentClient::readPendingDatagrams);
207
207
208
- _currentAssignment = NULL ;
208
+ // clear our current assignment shared pointer now that we're done with it
209
+ // if the assignment thread is still around it has its own shared pointer to the assignment
210
+ _currentAssignment.clear ();
209
211
210
212
// reset our NodeList by switching back to unassigned and clearing the list
211
213
nodeList->setOwnerType (NodeType::Unassigned);
0 commit comments