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