mirror of
https://github.com/overte-org/overte.git
synced 2025-07-22 12:17:05 +02:00
use single instance of SharedAssignmentPointer for assignment client so we actually get reference counting
This commit is contained in:
parent
d4193a2170
commit
faa062f8ab
10 changed files with 47 additions and 26 deletions
|
@ -25,11 +25,12 @@
|
|||
const QString ASSIGNMENT_CLIENT_TARGET_NAME = "assignment-client";
|
||||
const long long ASSIGNMENT_REQUEST_INTERVAL_MSECS = 1 * 1000;
|
||||
|
||||
SharedAssignmentPointer AssignmentClient::_currentAssignment;
|
||||
|
||||
int hifiSockAddrMeta = qRegisterMetaType<HifiSockAddr>("HifiSockAddr");
|
||||
|
||||
AssignmentClient::AssignmentClient(int &argc, char **argv) :
|
||||
QCoreApplication(argc, argv),
|
||||
_currentAssignment()
|
||||
QCoreApplication(argc, argv)
|
||||
{
|
||||
setOrganizationName("High Fidelity");
|
||||
setOrganizationDomain("highfidelity.io");
|
||||
|
|
|
@ -17,14 +17,18 @@ class AssignmentClient : public QCoreApplication {
|
|||
Q_OBJECT
|
||||
public:
|
||||
AssignmentClient(int &argc, char **argv);
|
||||
|
||||
static const SharedAssignmentPointer& getCurrentAssignment() { return _currentAssignment; }
|
||||
|
||||
private slots:
|
||||
void sendAssignmentRequest();
|
||||
void readPendingDatagrams();
|
||||
void assignmentCompleted();
|
||||
void handleAuthenticationRequest();
|
||||
|
||||
private:
|
||||
Assignment _requestAssignment;
|
||||
SharedAssignmentPointer _currentAssignment;
|
||||
static SharedAssignmentPointer _currentAssignment;
|
||||
};
|
||||
|
||||
#endif /* defined(__hifi__AssignmentClient__) */
|
||||
|
|
|
@ -76,9 +76,9 @@ void OctreeQueryNode::deleteLater() {
|
|||
}
|
||||
|
||||
|
||||
void OctreeQueryNode::initializeOctreeSendThread(const SharedOctreeServerPointer& octreeServer, SharedNodePointer node) {
|
||||
void OctreeQueryNode::initializeOctreeSendThread(const SharedAssignmentPointer& myAssignment, SharedNodePointer node) {
|
||||
// Create octree sending thread...
|
||||
_octreeSendThread = new OctreeSendThread(octreeServer, node);
|
||||
_octreeSendThread = new OctreeSendThread(myAssignment, node);
|
||||
_octreeSendThread->initialize(true);
|
||||
}
|
||||
|
||||
|
|
|
@ -19,9 +19,9 @@
|
|||
#include <OctreeElementBag.h>
|
||||
#include <OctreeSceneStats.h>
|
||||
|
||||
#include "OctreeServer.h"
|
||||
|
||||
class OctreeSendThread;
|
||||
class OctreeServer;
|
||||
typedef QSharedPointer<OctreeServer> SharedOctreeServerPointer;
|
||||
|
||||
class OctreeQueryNode : public OctreeQuery {
|
||||
Q_OBJECT
|
||||
|
@ -84,7 +84,7 @@ public:
|
|||
|
||||
OctreeSceneStats stats;
|
||||
|
||||
void initializeOctreeSendThread(const SharedOctreeServerPointer& octreeServer, SharedNodePointer node);
|
||||
void initializeOctreeSendThread(const SharedAssignmentPointer& myAssignment, SharedNodePointer node);
|
||||
bool isOctreeSendThreadInitalized() { return _octreeSendThread; }
|
||||
|
||||
void dumpOutOfView();
|
||||
|
|
|
@ -19,8 +19,9 @@
|
|||
quint64 startSceneSleepTime = 0;
|
||||
quint64 endSceneSleepTime = 0;
|
||||
|
||||
OctreeSendThread::OctreeSendThread(const SharedOctreeServerPointer& myServer, SharedNodePointer node) :
|
||||
_myServer(myServer),
|
||||
OctreeSendThread::OctreeSendThread(const SharedAssignmentPointer& myAssignment, SharedNodePointer node) :
|
||||
_myAssignment(myAssignment),
|
||||
_myServer(static_cast<OctreeServer*>(myAssignment.data())),
|
||||
_node(node),
|
||||
_nodeUUID(node->getUUID()),
|
||||
_packetData(),
|
||||
|
@ -28,7 +29,7 @@ OctreeSendThread::OctreeSendThread(const SharedOctreeServerPointer& myServer, Sh
|
|||
_processLock(),
|
||||
_isShuttingDown(false)
|
||||
{
|
||||
qDebug() << qPrintable(_myServer->getMyServerName()) << "server [" << _myServer.data() << "]: client connected "
|
||||
qDebug() << qPrintable(_myServer->getMyServerName()) << "server [" << _myServer << "]: client connected "
|
||||
"- starting sending thread [" << this << "]";
|
||||
|
||||
OctreeServer::clientConnected();
|
||||
|
@ -37,23 +38,22 @@ OctreeSendThread::OctreeSendThread(const SharedOctreeServerPointer& myServer, Sh
|
|||
OctreeSendThread::~OctreeSendThread() {
|
||||
QString serverName(_myServer->getMyServerName());
|
||||
|
||||
qDebug() << qPrintable(serverName) << "server [" << _myServer.data() << "]: client disconnected "
|
||||
qDebug() << qPrintable(serverName) << "server [" << _myServer << "]: client disconnected "
|
||||
"- ending sending thread [" << this << "]";
|
||||
OctreeServer::clientDisconnected();
|
||||
|
||||
qDebug() << qPrintable(serverName) << "server [" << _myServer.data() << "]: "
|
||||
qDebug() << qPrintable(serverName) << "server [" << _myServer << "]: "
|
||||
"- OctreeSendThread::~OctreeSendThread() this=[" << this << "]"
|
||||
"line: " << __LINE__;
|
||||
|
||||
_node.clear();
|
||||
|
||||
qDebug() << qPrintable(serverName) << "server [" << _myServer.data() << "]: "
|
||||
qDebug() << qPrintable(serverName) << "server [" << _myServer << "]: "
|
||||
"- OctreeSendThread::~OctreeSendThread() this=[" << this << "]"
|
||||
"line: " << __LINE__;
|
||||
void* serverPtr = _myServer.data();
|
||||
_myServer.clear();
|
||||
_myAssignment.clear();
|
||||
|
||||
qDebug() << qPrintable(serverName) << "server [" << serverPtr << "]: "
|
||||
qDebug() << qPrintable(serverName) << "server [" << _myServer << "]: "
|
||||
"- OctreeSendThread::~OctreeSendThread() this=[" << this << "]"
|
||||
"line: " << __LINE__;
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ bool OctreeSendThread::process() {
|
|||
}
|
||||
|
||||
// check that our WeakPointer to our server is still valid
|
||||
if (_myServer.isNull()) {
|
||||
if (!_myServer || _myAssignment.isNull()) {
|
||||
return false; // exit early if it's not, it means the server is shutting down
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,12 @@
|
|||
#include <GenericThread.h>
|
||||
#include <NetworkPacket.h>
|
||||
#include <OctreeElementBag.h>
|
||||
|
||||
|
||||
class OctreeServer;
|
||||
class OctreeQueryNode;
|
||||
|
||||
|
||||
#include "OctreeQueryNode.h"
|
||||
#include "OctreeServer.h"
|
||||
|
||||
|
@ -20,7 +26,7 @@
|
|||
class OctreeSendThread : public GenericThread {
|
||||
Q_OBJECT
|
||||
public:
|
||||
OctreeSendThread(const SharedOctreeServerPointer& myServer, SharedNodePointer node);
|
||||
OctreeSendThread(const SharedAssignmentPointer& myAssignment, SharedNodePointer node);
|
||||
virtual ~OctreeSendThread();
|
||||
|
||||
void setIsShuttingDown();
|
||||
|
@ -37,7 +43,8 @@ protected:
|
|||
virtual bool process();
|
||||
|
||||
private:
|
||||
SharedOctreeServerPointer _myServer;
|
||||
SharedAssignmentPointer _myAssignment;
|
||||
OctreeServer* _myServer;
|
||||
SharedNodePointer _node;
|
||||
QUuid _nodeUUID;
|
||||
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
#include <Logging.h>
|
||||
#include <UUID.h>
|
||||
|
||||
#include "../AssignmentClient.h"
|
||||
|
||||
#include "OctreeServer.h"
|
||||
#include "OctreeServerConsts.h"
|
||||
|
||||
|
@ -854,7 +856,8 @@ void OctreeServer::readPendingDatagrams() {
|
|||
if (debug) {
|
||||
qDebug() << "calling initializeOctreeSendThread()... node:" << *matchingNode;
|
||||
}
|
||||
nodeData->initializeOctreeSendThread(SharedOctreeServerPointer(this), matchingNode);
|
||||
SharedAssignmentPointer sharedAssignment = AssignmentClient::getCurrentAssignment();
|
||||
nodeData->initializeOctreeSendThread(sharedAssignment, matchingNode);
|
||||
}
|
||||
}
|
||||
} else if (packetType == PacketTypeJurisdictionRequest) {
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
#include <ThreadedAssignment.h>
|
||||
#include <EnvironmentData.h>
|
||||
|
||||
class OctreeServer;
|
||||
class OctreeQueryNode;
|
||||
class OctreeSendThread;
|
||||
|
||||
#include "OctreePersistThread.h"
|
||||
#include "OctreeSendThread.h"
|
||||
#include "OctreeServerConsts.h"
|
||||
|
@ -27,8 +31,8 @@
|
|||
|
||||
const int DEFAULT_PACKETS_PER_INTERVAL = 2000; // some 120,000 packets per second total
|
||||
|
||||
class OctreeServer;
|
||||
typedef QSharedPointer<OctreeServer> SharedOctreeServerPointer;
|
||||
//class OctreeServer;
|
||||
//typedef QSharedPointer<OctreeServer> SharedOctreeServerPointer;
|
||||
|
||||
/// Handles assignments of type OctreeServer - sending octrees to various clients.
|
||||
class OctreeServer : public ThreadedAssignment, public HTTPRequestHandler {
|
||||
|
|
|
@ -17,7 +17,6 @@ ThreadedAssignment::ThreadedAssignment(const QByteArray& packet) :
|
|||
Assignment(packet),
|
||||
_isFinished(false)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void ThreadedAssignment::setFinished(bool isFinished) {
|
||||
|
|
|
@ -13,6 +13,10 @@
|
|||
|
||||
#include "Assignment.h"
|
||||
|
||||
|
||||
class ThreadedAssignment;
|
||||
typedef QSharedPointer<ThreadedAssignment> SharedAssignmentPointer;
|
||||
|
||||
class ThreadedAssignment : public Assignment {
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
@ -35,8 +39,7 @@ private slots:
|
|||
void checkInWithDomainServerOrExit();
|
||||
signals:
|
||||
void finished();
|
||||
};
|
||||
};
|
||||
|
||||
typedef QSharedPointer<ThreadedAssignment> SharedAssignmentPointer;
|
||||
|
||||
#endif /* defined(__hifi__ThreadedAssignment__) */
|
||||
|
|
Loading…
Reference in a new issue