mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 16:18:05 +02:00
final fixes to get ACs building again
This commit is contained in:
parent
f06636d45e
commit
9d4f9aa21e
10 changed files with 42 additions and 88 deletions
|
@ -60,34 +60,38 @@ Agent::Agent(NLPacket& packet) :
|
||||||
}
|
}
|
||||||
|
|
||||||
void Agent::handleOctreePacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode) {
|
void Agent::handleOctreePacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode) {
|
||||||
QByteArray mutablePacket = QByteArray(packet->getData(), packet->getSizeWithHeader());
|
|
||||||
int messageLength = mutablePacket.size();
|
|
||||||
|
|
||||||
auto packetType = packet->getType();
|
auto packetType = packet->getType();
|
||||||
|
|
||||||
if (packetType == PacketType::OctreeStats) {
|
if (packetType == PacketType::OctreeStats) {
|
||||||
|
|
||||||
int statsMessageLength = OctreeHeadlessViewer::parseOctreeStats(packet, senderNode);
|
int statsMessageLength = OctreeHeadlessViewer::parseOctreeStats(packet, senderNode);
|
||||||
if (messageLength > statsMessageLength) {
|
if (packet->getSizeUsed() > statsMessageLength) {
|
||||||
mutablePacket = mutablePacket.mid(statsMessageLength);
|
// pull out the piggybacked packet and create a new QSharedPointer<NLPacket> for it
|
||||||
|
int packetSizeWithHeader = packet->getSizeUsed() - statsMessageLength;
|
||||||
|
|
||||||
|
std::unique_ptr<char> buffer = std::unique_ptr<char>(new char[packetSizeWithHeader]);
|
||||||
|
memcpy(buffer.get(), packet->getPayload() + statsMessageLength, packetSizeWithHeader);
|
||||||
|
|
||||||
|
auto newPacket = NLPacket::fromReceivedPacket(std::move(buffer), packetSizeWithHeader, packet->getSenderSockAddr());
|
||||||
|
packet = QSharedPointer<NLPacket>(newPacket.release());
|
||||||
} else {
|
} else {
|
||||||
return; // bail since no piggyback data
|
return; // bail since no piggyback data
|
||||||
}
|
}
|
||||||
|
|
||||||
packetType = packetTypeForPacket(mutablePacket);
|
packetType = packet->getType();
|
||||||
} // fall through to piggyback message
|
} // fall through to piggyback message
|
||||||
|
|
||||||
if (packetType == PacketType::EntityData || packetType == PacketType::EntityErase) {
|
if (packetType == PacketType::EntityData || packetType == PacketType::EntityErase) {
|
||||||
_entityViewer.processDatagram(mutablePacket, senderNode);
|
_entityViewer.processDatagram(*packet, senderNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Agent::handleJurisdictionPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) {
|
void Agent::handleJurisdictionPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode) {
|
||||||
QByteArray receivedPacket = QByteArray::fromRawData(packet->getData(), packet->getSizeWithHeader());
|
NodeType_t nodeType;
|
||||||
int headerBytes = numBytesForPacketHeader(receivedPacket);
|
packet->peek(reinterpret_cast<char*>(&nodeType), sizeof(nodeType));
|
||||||
|
|
||||||
// PacketType_JURISDICTION, first byte is the node type...
|
// PacketType_JURISDICTION, first byte is the node type...
|
||||||
switch (receivedPacket[headerBytes]) {
|
switch (nodeType) {
|
||||||
case NodeType::EntityServer:
|
case NodeType::EntityServer:
|
||||||
DependencyManager::get<EntityScriptingInterface>()->getJurisdictionListener()->
|
DependencyManager::get<EntityScriptingInterface>()->getJurisdictionListener()->
|
||||||
queueReceivedPacket(packet, senderNode);
|
queueReceivedPacket(packet, senderNode);
|
||||||
|
@ -95,8 +99,8 @@ void Agent::handleJurisdictionPacket(QSharedPointer<NLPacket> packet, SharedNode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Agent::handleAudioPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) {
|
void Agent::handleAudioPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode) {
|
||||||
_receivedAudioStream.parseData(QByteArray::fromRawData(packet->getData(), packet->getSizeWithHeader()));
|
_receivedAudioStream.parseData(*packet, senderNode);
|
||||||
|
|
||||||
_lastReceivedAudioLoudness = _receivedAudioStream.getNextOutputFrameLoudness();
|
_lastReceivedAudioLoudness = _receivedAudioStream.getNextOutputFrameLoudness();
|
||||||
|
|
||||||
|
|
|
@ -210,7 +210,7 @@ void AssignmentClient::handleCreateAssignmentPacket(QSharedPointer<NLPacket> pac
|
||||||
qDebug() << "Received a PacketType::CreateAssignment - attempting to unpack.";
|
qDebug() << "Received a PacketType::CreateAssignment - attempting to unpack.";
|
||||||
|
|
||||||
// construct the deployed assignment from the packet data
|
// construct the deployed assignment from the packet data
|
||||||
_currentAssignment = AssignmentFactory::unpackAssignment(QByteArray::fromRawData(packet->getData(), packet->getSizeWithHeader()));
|
_currentAssignment = AssignmentFactory::unpackAssignment(*packet);
|
||||||
|
|
||||||
if (_currentAssignment) {
|
if (_currentAssignment) {
|
||||||
qDebug() << "Received an assignment -" << *_currentAssignment;
|
qDebug() << "Received an assignment -" << *_currentAssignment;
|
||||||
|
|
|
@ -17,12 +17,10 @@
|
||||||
#include "avatars/AvatarMixer.h"
|
#include "avatars/AvatarMixer.h"
|
||||||
#include "entities/EntityServer.h"
|
#include "entities/EntityServer.h"
|
||||||
|
|
||||||
ThreadedAssignment* AssignmentFactory::unpackAssignment(const QByteArray& packet) {
|
ThreadedAssignment* AssignmentFactory::unpackAssignment(NLPacket& packet) {
|
||||||
QDataStream packetStream(packet);
|
|
||||||
packetStream.skipRawData(numBytesForPacketHeader(packet));
|
|
||||||
|
|
||||||
quint8 packedType;
|
quint8 packedType;
|
||||||
packetStream >> packedType;
|
packet.peek(reinterpret_cast<char*>(&packedType), sizeof(packedType));
|
||||||
|
|
||||||
Assignment::Type unpackedType = (Assignment::Type) packedType;
|
Assignment::Type unpackedType = (Assignment::Type) packedType;
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
class AssignmentFactory {
|
class AssignmentFactory {
|
||||||
public:
|
public:
|
||||||
static ThreadedAssignment* unpackAssignment(const QByteArray& packet);
|
static ThreadedAssignment* unpackAssignment(NLPacket& packet);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_AssignmentFactory_h
|
#endif // hifi_AssignmentFactory_h
|
||||||
|
|
|
@ -21,9 +21,10 @@ const char* MODEL_SERVER_NAME = "Entity";
|
||||||
const char* MODEL_SERVER_LOGGING_TARGET_NAME = "entity-server";
|
const char* MODEL_SERVER_LOGGING_TARGET_NAME = "entity-server";
|
||||||
const char* LOCAL_MODELS_PERSIST_FILE = "resources/models.svo";
|
const char* LOCAL_MODELS_PERSIST_FILE = "resources/models.svo";
|
||||||
|
|
||||||
EntityServer::EntityServer(const QByteArray& packet)
|
EntityServer::EntityServer(NLPacket& packet) :
|
||||||
: OctreeServer(packet), _entitySimulation(NULL) {
|
OctreeServer(packet),
|
||||||
|
_entitySimulation(NULL)
|
||||||
|
{
|
||||||
auto& packetReceiver = DependencyManager::get<NodeList>()->getPacketReceiver();
|
auto& packetReceiver = DependencyManager::get<NodeList>()->getPacketReceiver();
|
||||||
packetReceiver.registerPacketListener(PacketType::EntityAdd, this, "handleEntityAddPacket");
|
packetReceiver.registerPacketListener(PacketType::EntityAdd, this, "handleEntityAddPacket");
|
||||||
packetReceiver.registerPacketListener(PacketType::EntityEdit, this, "handleEntityEditPacket");
|
packetReceiver.registerPacketListener(PacketType::EntityEdit, this, "handleEntityEditPacket");
|
||||||
|
@ -40,19 +41,19 @@ EntityServer::~EntityServer() {
|
||||||
tree->removeNewlyCreatedHook(this);
|
tree->removeNewlyCreatedHook(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityServer::handleEntityAddPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) {
|
void EntityServer::handleEntityAddPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode) {
|
||||||
if (_octreeInboundPacketProcessor) {
|
if (_octreeInboundPacketProcessor) {
|
||||||
_octreeInboundPacketProcessor->queueReceivedPacket(packet, senderNode);
|
_octreeInboundPacketProcessor->queueReceivedPacket(packet, senderNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityServer::handleEntityEditPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) {
|
void EntityServer::handleEntityEditPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode) {
|
||||||
if (_octreeInboundPacketProcessor) {
|
if (_octreeInboundPacketProcessor) {
|
||||||
_octreeInboundPacketProcessor->queueReceivedPacket(packet, senderNode);
|
_octreeInboundPacketProcessor->queueReceivedPacket(packet, senderNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityServer::handleEntityErasePacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) {
|
void EntityServer::handleEntityErasePacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode) {
|
||||||
if (_octreeInboundPacketProcessor) {
|
if (_octreeInboundPacketProcessor) {
|
||||||
_octreeInboundPacketProcessor->queueReceivedPacket(packet, senderNode);
|
_octreeInboundPacketProcessor->queueReceivedPacket(packet, senderNode);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
class EntityServer : public OctreeServer, public NewlyCreatedEntityHook {
|
class EntityServer : public OctreeServer, public NewlyCreatedEntityHook {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
EntityServer(const QByteArray& packet);
|
EntityServer(NLPacket& packet);
|
||||||
~EntityServer();
|
~EntityServer();
|
||||||
|
|
||||||
// Subclasses must implement these methods
|
// Subclasses must implement these methods
|
||||||
|
@ -50,9 +50,9 @@ protected:
|
||||||
virtual Octree* createTree();
|
virtual Octree* createTree();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void handleEntityAddPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr);
|
void handleEntityAddPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode);
|
||||||
void handleEntityEditPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr);
|
void handleEntityEditPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode);
|
||||||
void handleEntityErasePacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr);
|
void handleEntityErasePacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EntitySimulation* _entitySimulation;
|
EntitySimulation* _entitySimulation;
|
||||||
|
|
|
@ -813,53 +813,11 @@ void OctreeServer::parsePayload() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OctreeServer::readPendingDatagram(const QByteArray& receivedPacket, const HifiSockAddr& senderSockAddr) {
|
void OctreeServer::handleOctreeQueryPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode) {
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
|
||||||
|
|
||||||
// If we know we're shutting down we just drop these packets on the floor.
|
|
||||||
// This stops us from initializing send threads we just shut down.
|
|
||||||
|
|
||||||
if (!_isShuttingDown) {
|
|
||||||
if (nodeList->packetVersionAndHashMatch(receivedPacket)) {
|
|
||||||
PacketType::Value packetType = packetTypeForPacket(receivedPacket);
|
|
||||||
SharedNodePointer matchingNode = nodeList->sendingNodeForPacket(receivedPacket);
|
|
||||||
if (packetType == getMyQueryMessageType()) {
|
|
||||||
// If we got a query packet, then we're talking to an agent, and we
|
|
||||||
// need to make sure we have it in our nodeList.
|
|
||||||
if (matchingNode) {
|
|
||||||
nodeList->updateNodeWithDataFromPacket(matchingNode, receivedPacket);
|
|
||||||
|
|
||||||
OctreeQueryNode* nodeData = (OctreeQueryNode*) matchingNode->getLinkedData();
|
|
||||||
if (nodeData && !nodeData->isOctreeSendThreadInitalized()) {
|
|
||||||
nodeData->initializeOctreeSendThread(this, matchingNode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (packetType == PacketType::OctreeDataNack) {
|
|
||||||
// If we got a nack packet, then we're talking to an agent, and we
|
|
||||||
// need to make sure we have it in our nodeList.
|
|
||||||
if (matchingNode) {
|
|
||||||
OctreeQueryNode* nodeData = (OctreeQueryNode*)matchingNode->getLinkedData();
|
|
||||||
if (nodeData) {
|
|
||||||
nodeData->parseNackPacket(receivedPacket);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (packetType == PacketType::JurisdictionRequest) {
|
|
||||||
_jurisdictionSender->queueReceivedPacket(matchingNode, receivedPacket);
|
|
||||||
} else if (_octreeInboundPacketProcessor && getOctree()->handlesEditPacketType(packetType)) {
|
|
||||||
_octreeInboundPacketProcessor->queueReceivedPacket(matchingNode, receivedPacket);
|
|
||||||
} else {
|
|
||||||
// let processNodeData handle it.
|
|
||||||
DependencyManager::get<NodeList>()->processNodeData(senderSockAddr, receivedPacket);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void OctreeServer::handleOctreeQueryPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) {
|
|
||||||
// If we got a query packet, then we're talking to an agent, and we
|
// If we got a query packet, then we're talking to an agent, and we
|
||||||
// need to make sure we have it in our nodeList.
|
// need to make sure we have it in our nodeList.
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
nodeList->updateNodeWithDataFromPacket(senderNode, packet->getData());
|
nodeList->updateNodeWithDataFromPacket(packet, senderNode);
|
||||||
|
|
||||||
OctreeQueryNode* nodeData = (OctreeQueryNode*)senderNode->getLinkedData();
|
OctreeQueryNode* nodeData = (OctreeQueryNode*)senderNode->getLinkedData();
|
||||||
if (nodeData && !nodeData->isOctreeSendThreadInitalized()) {
|
if (nodeData && !nodeData->isOctreeSendThreadInitalized()) {
|
||||||
|
@ -867,7 +825,7 @@ void OctreeServer::handleOctreeQueryPacket(QSharedPointer<NLPacket> packet, Shar
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OctreeServer::handleOctreeDataNackPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) {
|
void OctreeServer::handleOctreeDataNackPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode) {
|
||||||
// If we got a nack packet, then we're talking to an agent, and we
|
// If we got a nack packet, then we're talking to an agent, and we
|
||||||
// need to make sure we have it in our nodeList.
|
// need to make sure we have it in our nodeList.
|
||||||
OctreeQueryNode* nodeData = (OctreeQueryNode*)senderNode->getLinkedData();
|
OctreeQueryNode* nodeData = (OctreeQueryNode*)senderNode->getLinkedData();
|
||||||
|
@ -876,8 +834,8 @@ void OctreeServer::handleOctreeDataNackPacket(QSharedPointer<NLPacket> packet, S
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OctreeServer::handleJurisdictionRequestPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr) {
|
void OctreeServer::handleJurisdictionRequestPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode) {
|
||||||
_jurisdictionSender->queueReceivedPacket(senderNode, packet->getData());
|
_jurisdictionSender->queueReceivedPacket(packet, senderNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OctreeServer::setupDatagramProcessingThread() {
|
void OctreeServer::setupDatagramProcessingThread() {
|
||||||
|
@ -902,9 +860,6 @@ void OctreeServer::setupDatagramProcessingThread() {
|
||||||
connect(&nodeList->getNodeSocket(), &QUdpSocket::readyRead,
|
connect(&nodeList->getNodeSocket(), &QUdpSocket::readyRead,
|
||||||
datagramProcessor, &OctreeServerDatagramProcessor::readPendingDatagrams);
|
datagramProcessor, &OctreeServerDatagramProcessor::readPendingDatagrams);
|
||||||
|
|
||||||
// connect to the datagram processing thread signal that tells us we have to handle a packet
|
|
||||||
connect(datagramProcessor, &OctreeServerDatagramProcessor::packetRequiresProcessing, this, &OctreeServer::readPendingDatagram);
|
|
||||||
|
|
||||||
// delete the datagram processor and the associated thread when the QThread quits
|
// delete the datagram processor and the associated thread when the QThread quits
|
||||||
connect(_datagramProcessingThread, &QThread::finished, datagramProcessor, &QObject::deleteLater);
|
connect(_datagramProcessingThread, &QThread::finished, datagramProcessor, &QObject::deleteLater);
|
||||||
connect(datagramProcessor, &QObject::destroyed, _datagramProcessingThread, &QThread::deleteLater);
|
connect(datagramProcessor, &QObject::destroyed, _datagramProcessingThread, &QThread::deleteLater);
|
||||||
|
|
|
@ -125,13 +125,10 @@ public slots:
|
||||||
void nodeKilled(SharedNodePointer node);
|
void nodeKilled(SharedNodePointer node);
|
||||||
void sendStatsPacket();
|
void sendStatsPacket();
|
||||||
|
|
||||||
void readPendingDatagrams() { }; // this will not be called since our datagram processing thread will handle
|
|
||||||
void readPendingDatagram(const QByteArray& receivedPacket, const HifiSockAddr& senderSockAddr);
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void handleOctreeQueryPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr);
|
void handleOctreeQueryPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode);
|
||||||
void handleOctreeDataNackPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr);
|
void handleOctreeDataNackPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode);
|
||||||
void handleJurisdictionRequestPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode, HifiSockAddr senderSockAddr);
|
void handleJurisdictionRequestPacket(QSharedPointer<NLPacket> packet, SharedNodePointer senderNode);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual Octree* createTree() = 0;
|
virtual Octree* createTree() = 0;
|
||||||
|
|
|
@ -63,7 +63,6 @@ public:
|
||||||
void resetNodeInterestSet() { _nodeTypesOfInterest.clear(); }
|
void resetNodeInterestSet() { _nodeTypesOfInterest.clear(); }
|
||||||
|
|
||||||
void processReceivedPacket(std::unique_ptr<NLPacket>, HifiSockAddr senderSockAddr);
|
void processReceivedPacket(std::unique_ptr<NLPacket>, HifiSockAddr senderSockAddr);
|
||||||
void processNodeData(const HifiSockAddr& senderSockAddr, const QByteArray& packet);
|
|
||||||
|
|
||||||
void setAssignmentServerSocket(const HifiSockAddr& serverSocket) { _assignmentServerSocket = serverSocket; }
|
void setAssignmentServerSocket(const HifiSockAddr& serverSocket) { _assignmentServerSocket = serverSocket; }
|
||||||
void sendAssignment(Assignment& assignment);
|
void sendAssignment(Assignment& assignment);
|
||||||
|
|
|
@ -38,7 +38,7 @@ public:
|
||||||
void setNodeType(NodeType_t type) { _nodeType = type; }
|
void setNodeType(NodeType_t type) { _nodeType = type; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void processPacket(QSharedPointer<NLPacket> pack, SharedNodePointer sendingNode);
|
virtual void processPacket(QSharedPointer<NLPacket> packet, SharedNodePointer sendingNode);
|
||||||
|
|
||||||
/// Locks all the resources of the thread.
|
/// Locks all the resources of the thread.
|
||||||
void lockRequestingNodes() { _requestingNodeMutex.lock(); }
|
void lockRequestingNodes() { _requestingNodeMutex.lock(); }
|
||||||
|
|
Loading…
Reference in a new issue