mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 18:25:52 +02:00
Merge branch 'master' of ssh://github.com/highfidelity/hifi into avatar-interaction
This commit is contained in:
commit
ab25fd03af
4 changed files with 19 additions and 32 deletions
|
@ -115,7 +115,6 @@ function sendNextCells() {
|
||||||
var sentFirstBoard = false;
|
var sentFirstBoard = false;
|
||||||
|
|
||||||
function step() {
|
function step() {
|
||||||
print("step()...");
|
|
||||||
if (sentFirstBoard) {
|
if (sentFirstBoard) {
|
||||||
// we've already sent the first full board, perform a step in time
|
// we've already sent the first full board, perform a step in time
|
||||||
updateCells();
|
updateCells();
|
||||||
|
|
|
@ -39,6 +39,7 @@ OctreeEditPacketSender::OctreeEditPacketSender() :
|
||||||
}
|
}
|
||||||
|
|
||||||
OctreeEditPacketSender::~OctreeEditPacketSender() {
|
OctreeEditPacketSender::~OctreeEditPacketSender() {
|
||||||
|
_pendingPacketsLock.lock();
|
||||||
while (!_preServerSingleMessagePackets.empty()) {
|
while (!_preServerSingleMessagePackets.empty()) {
|
||||||
EditPacketBuffer* packet = _preServerSingleMessagePackets.front();
|
EditPacketBuffer* packet = _preServerSingleMessagePackets.front();
|
||||||
delete packet;
|
delete packet;
|
||||||
|
@ -49,6 +50,7 @@ OctreeEditPacketSender::~OctreeEditPacketSender() {
|
||||||
delete packet;
|
delete packet;
|
||||||
_preServerPackets.erase(_preServerPackets.begin());
|
_preServerPackets.erase(_preServerPackets.begin());
|
||||||
}
|
}
|
||||||
|
_pendingPacketsLock.unlock();
|
||||||
//printf("OctreeEditPacketSender::~OctreeEditPacketSender() [%p] destroyed... \n", this);
|
//printf("OctreeEditPacketSender::~OctreeEditPacketSender() [%p] destroyed... \n", this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,6 +117,7 @@ void OctreeEditPacketSender::processPreServerExistsPackets() {
|
||||||
assert(serversExist()); // we should only be here if we have jurisdictions
|
assert(serversExist()); // we should only be here if we have jurisdictions
|
||||||
|
|
||||||
// First send out all the single message packets...
|
// First send out all the single message packets...
|
||||||
|
_pendingPacketsLock.lock();
|
||||||
while (!_preServerSingleMessagePackets.empty()) {
|
while (!_preServerSingleMessagePackets.empty()) {
|
||||||
EditPacketBuffer* packet = _preServerSingleMessagePackets.front();
|
EditPacketBuffer* packet = _preServerSingleMessagePackets.front();
|
||||||
queuePacketToNodes(&packet->_currentBuffer[0], packet->_currentSize);
|
queuePacketToNodes(&packet->_currentBuffer[0], packet->_currentSize);
|
||||||
|
@ -129,6 +132,7 @@ void OctreeEditPacketSender::processPreServerExistsPackets() {
|
||||||
delete packet;
|
delete packet;
|
||||||
_preServerPackets.erase(_preServerPackets.begin());
|
_preServerPackets.erase(_preServerPackets.begin());
|
||||||
}
|
}
|
||||||
|
_pendingPacketsLock.unlock();
|
||||||
|
|
||||||
// if while waiting for the jurisdictions the caller called releaseQueuedMessages()
|
// if while waiting for the jurisdictions the caller called releaseQueuedMessages()
|
||||||
// then we want to honor that request now.
|
// then we want to honor that request now.
|
||||||
|
@ -140,8 +144,10 @@ void OctreeEditPacketSender::processPreServerExistsPackets() {
|
||||||
|
|
||||||
void OctreeEditPacketSender::queuePendingPacketToNodes(PacketType type, unsigned char* buffer, ssize_t length) {
|
void OctreeEditPacketSender::queuePendingPacketToNodes(PacketType type, unsigned char* buffer, ssize_t length) {
|
||||||
// If we're asked to save messages while waiting for voxel servers to arrive, then do so...
|
// If we're asked to save messages while waiting for voxel servers to arrive, then do so...
|
||||||
|
|
||||||
if (_maxPendingMessages > 0) {
|
if (_maxPendingMessages > 0) {
|
||||||
EditPacketBuffer* packet = new EditPacketBuffer(type, buffer, length);
|
EditPacketBuffer* packet = new EditPacketBuffer(type, buffer, length);
|
||||||
|
_pendingPacketsLock.lock();
|
||||||
_preServerSingleMessagePackets.push_back(packet);
|
_preServerSingleMessagePackets.push_back(packet);
|
||||||
// if we've saved MORE than our max, then clear out the oldest packet...
|
// if we've saved MORE than our max, then clear out the oldest packet...
|
||||||
int allPendingMessages = _preServerSingleMessagePackets.size() + _preServerPackets.size();
|
int allPendingMessages = _preServerSingleMessagePackets.size() + _preServerPackets.size();
|
||||||
|
@ -150,6 +156,7 @@ void OctreeEditPacketSender::queuePendingPacketToNodes(PacketType type, unsigned
|
||||||
delete packet;
|
delete packet;
|
||||||
_preServerSingleMessagePackets.erase(_preServerSingleMessagePackets.begin());
|
_preServerSingleMessagePackets.erase(_preServerSingleMessagePackets.begin());
|
||||||
}
|
}
|
||||||
|
_pendingPacketsLock.unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -197,6 +204,7 @@ void OctreeEditPacketSender::queueOctreeEditMessage(PacketType type, unsigned ch
|
||||||
if (!serversExist()) {
|
if (!serversExist()) {
|
||||||
if (_maxPendingMessages > 0) {
|
if (_maxPendingMessages > 0) {
|
||||||
EditPacketBuffer* packet = new EditPacketBuffer(type, codeColorBuffer, length);
|
EditPacketBuffer* packet = new EditPacketBuffer(type, codeColorBuffer, length);
|
||||||
|
_pendingPacketsLock.lock();
|
||||||
_preServerPackets.push_back(packet);
|
_preServerPackets.push_back(packet);
|
||||||
|
|
||||||
// if we've saved MORE than out max, then clear out the oldest packet...
|
// if we've saved MORE than out max, then clear out the oldest packet...
|
||||||
|
@ -206,12 +214,11 @@ void OctreeEditPacketSender::queueOctreeEditMessage(PacketType type, unsigned ch
|
||||||
delete packet;
|
delete packet;
|
||||||
_preServerPackets.erase(_preServerPackets.begin());
|
_preServerPackets.erase(_preServerPackets.begin());
|
||||||
}
|
}
|
||||||
}
|
_pendingPacketsLock.unlock();
|
||||||
|
}
|
||||||
return; // bail early
|
return; // bail early
|
||||||
}
|
}
|
||||||
|
|
||||||
//qDebug() << "queueOctreeEditMessage() line:" << __LINE__;
|
|
||||||
|
|
||||||
// We want to filter out edit messages for servers based on the server's Jurisdiction
|
// We want to filter out edit messages for servers based on the server's Jurisdiction
|
||||||
// But we can't really do that with a packed message, since each edit message could be destined
|
// But we can't really do that with a packed message, since each edit message could be destined
|
||||||
// for a different server... So we need to actually manage multiple queued packets... one
|
// for a different server... So we need to actually manage multiple queued packets... one
|
||||||
|
@ -229,18 +236,14 @@ void OctreeEditPacketSender::queueOctreeEditMessage(PacketType type, unsigned ch
|
||||||
if ((*_serverJurisdictions).find(nodeUUID) != (*_serverJurisdictions).end()) {
|
if ((*_serverJurisdictions).find(nodeUUID) != (*_serverJurisdictions).end()) {
|
||||||
const JurisdictionMap& map = (*_serverJurisdictions)[nodeUUID];
|
const JurisdictionMap& map = (*_serverJurisdictions)[nodeUUID];
|
||||||
isMyJurisdiction = (map.isMyJurisdiction(codeColorBuffer, CHECK_NODE_ONLY) == JurisdictionMap::WITHIN);
|
isMyJurisdiction = (map.isMyJurisdiction(codeColorBuffer, CHECK_NODE_ONLY) == JurisdictionMap::WITHIN);
|
||||||
//qDebug() << "queueOctreeEditMessage() line:" << __LINE__ << " isMyJurisdiction=" << isMyJurisdiction;
|
|
||||||
} else {
|
} else {
|
||||||
isMyJurisdiction = false;
|
isMyJurisdiction = false;
|
||||||
//qDebug() << "queueOctreeEditMessage() line:" << __LINE__;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isMyJurisdiction) {
|
if (isMyJurisdiction) {
|
||||||
EditPacketBuffer& packetBuffer = _pendingEditPackets[nodeUUID];
|
EditPacketBuffer& packetBuffer = _pendingEditPackets[nodeUUID];
|
||||||
packetBuffer._nodeUUID = nodeUUID;
|
packetBuffer._nodeUUID = nodeUUID;
|
||||||
|
|
||||||
//qDebug() << "queueOctreeEditMessage() line:" << __LINE__;
|
|
||||||
|
|
||||||
// If we're switching type, then we send the last one and start over
|
// If we're switching type, then we send the last one and start over
|
||||||
if ((type != packetBuffer._currentType && packetBuffer._currentSize > 0) ||
|
if ((type != packetBuffer._currentType && packetBuffer._currentSize > 0) ||
|
||||||
(packetBuffer._currentSize + length >= _maxPacketSize)) {
|
(packetBuffer._currentSize + length >= _maxPacketSize)) {
|
||||||
|
@ -259,11 +262,8 @@ void OctreeEditPacketSender::queueOctreeEditMessage(PacketType type, unsigned ch
|
||||||
// fixup the buffer for any clock skew
|
// fixup the buffer for any clock skew
|
||||||
if (node->getClockSkewUsec() != 0) {
|
if (node->getClockSkewUsec() != 0) {
|
||||||
adjustEditPacketForClockSkew(codeColorBuffer, length, node->getClockSkewUsec());
|
adjustEditPacketForClockSkew(codeColorBuffer, length, node->getClockSkewUsec());
|
||||||
//qDebug() << "queueOctreeEditMessage() line:" << __LINE__;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//qDebug() << "queueOctreeEditMessage() line:" << __LINE__;
|
|
||||||
|
|
||||||
memcpy(&packetBuffer._currentBuffer[packetBuffer._currentSize], codeColorBuffer, length);
|
memcpy(&packetBuffer._currentBuffer[packetBuffer._currentSize], codeColorBuffer, length);
|
||||||
packetBuffer._currentSize += length;
|
packetBuffer._currentSize += length;
|
||||||
}
|
}
|
||||||
|
@ -280,14 +280,12 @@ void OctreeEditPacketSender::releaseQueuedMessages() {
|
||||||
} else {
|
} else {
|
||||||
for (std::map<QUuid, EditPacketBuffer>::iterator i = _pendingEditPackets.begin(); i != _pendingEditPackets.end(); i++) {
|
for (std::map<QUuid, EditPacketBuffer>::iterator i = _pendingEditPackets.begin(); i != _pendingEditPackets.end(); i++) {
|
||||||
releaseQueuedPacket(i->second);
|
releaseQueuedPacket(i->second);
|
||||||
//qDebug() << "releaseQueuedMessages() line:" << __LINE__;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OctreeEditPacketSender::releaseQueuedPacket(EditPacketBuffer& packetBuffer) {
|
void OctreeEditPacketSender::releaseQueuedPacket(EditPacketBuffer& packetBuffer) {
|
||||||
if (packetBuffer._currentSize > 0 && packetBuffer._currentType != PacketTypeUnknown) {
|
if (packetBuffer._currentSize > 0 && packetBuffer._currentType != PacketTypeUnknown) {
|
||||||
//qDebug() << "OctreeEditPacketSender::releaseQueuedPacket() line:" << __LINE__;
|
|
||||||
queuePacketToNode(packetBuffer._nodeUUID, &packetBuffer._currentBuffer[0], packetBuffer._currentSize);
|
queuePacketToNode(packetBuffer._nodeUUID, &packetBuffer._currentBuffer[0], packetBuffer._currentSize);
|
||||||
}
|
}
|
||||||
packetBuffer._currentSize = 0;
|
packetBuffer._currentSize = 0;
|
||||||
|
|
|
@ -105,8 +105,9 @@ protected:
|
||||||
// These are packets that are waiting to be processed because we don't yet know if there are servers
|
// These are packets that are waiting to be processed because we don't yet know if there are servers
|
||||||
int _maxPendingMessages;
|
int _maxPendingMessages;
|
||||||
bool _releaseQueuedMessagesPending;
|
bool _releaseQueuedMessagesPending;
|
||||||
std::vector<EditPacketBuffer*> _preServerPackets; // these will get packed into other larger packets
|
QMutex _pendingPacketsLock;
|
||||||
std::vector<EditPacketBuffer*> _preServerSingleMessagePackets; // these will go out as is
|
QVector<EditPacketBuffer*> _preServerPackets; // these will get packed into other larger packets
|
||||||
|
QVector<EditPacketBuffer*> _preServerSingleMessagePackets; // these will go out as is
|
||||||
|
|
||||||
NodeToJurisdictionMap* _serverJurisdictions;
|
NodeToJurisdictionMap* _serverJurisdictions;
|
||||||
|
|
||||||
|
|
|
@ -14,24 +14,13 @@
|
||||||
#include <PacketHeaders.h>
|
#include <PacketHeaders.h>
|
||||||
#include "VoxelEditPacketSender.h"
|
#include "VoxelEditPacketSender.h"
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Function: createVoxelEditMessage()
|
|
||||||
// Description: creates an "insert" or "remove" voxel message for a voxel code
|
|
||||||
// corresponding to the closest voxel which encloses a cube with
|
|
||||||
// lower corners at x,y,z, having side of length S.
|
|
||||||
// The input values x,y,z range 0.0 <= v < 1.0
|
|
||||||
// message should be either 'S' for SET or 'E' for ERASE
|
|
||||||
//
|
|
||||||
// IMPORTANT: The buffer is returned to you a buffer which you MUST delete when you are
|
|
||||||
// done with it.
|
|
||||||
//
|
|
||||||
// HACK ATTACK: Well, what if this is larger than the MTU? That's the caller's problem, we
|
|
||||||
// just truncate the message
|
|
||||||
//
|
|
||||||
// Complaints: Brad :)
|
|
||||||
#define GUESS_OF_VOXELCODE_SIZE 10
|
#define GUESS_OF_VOXELCODE_SIZE 10
|
||||||
#define MAXIMUM_EDIT_VOXEL_MESSAGE_SIZE 1500
|
#define MAXIMUM_EDIT_VOXEL_MESSAGE_SIZE 1500
|
||||||
#define SIZE_OF_COLOR_DATA sizeof(rgbColor)
|
#define SIZE_OF_COLOR_DATA sizeof(rgbColor)
|
||||||
|
/// creates an "insert" or "remove" voxel message for a voxel code corresponding to the closest voxel which encloses a cube
|
||||||
|
/// with lower corners at x,y,z, having side of length S. The input values x,y,z range 0.0 <= v < 1.0 message should be either
|
||||||
|
/// PacketTypeVoxelSet, PacketTypeVoxelSetDestructive, or PacketTypeVoxelErase. The buffer is returned to caller becomes
|
||||||
|
/// responsibility of caller and MUST be deleted by caller.
|
||||||
bool createVoxelEditMessage(PacketType command, short int sequence,
|
bool createVoxelEditMessage(PacketType command, short int sequence,
|
||||||
int voxelCount, VoxelDetail* voxelDetails, unsigned char*& bufferOut, int& sizeOut) {
|
int voxelCount, VoxelDetail* voxelDetails, unsigned char*& bufferOut, int& sizeOut) {
|
||||||
|
|
||||||
|
@ -144,9 +133,9 @@ void VoxelEditPacketSender::queueVoxelEditMessages(PacketType type, int numberOf
|
||||||
|
|
||||||
for (int i = 0; i < numberOfDetails; i++) {
|
for (int i = 0; i < numberOfDetails; i++) {
|
||||||
// use MAX_PACKET_SIZE since it's static and guarenteed to be larger than _maxPacketSize
|
// use MAX_PACKET_SIZE since it's static and guarenteed to be larger than _maxPacketSize
|
||||||
static unsigned char bufferOut[MAX_PACKET_SIZE];
|
unsigned char bufferOut[MAX_PACKET_SIZE];
|
||||||
int sizeOut = 0;
|
int sizeOut = 0;
|
||||||
|
|
||||||
if (encodeVoxelEditMessageDetails(type, 1, &details[i], &bufferOut[0], _maxPacketSize, sizeOut)) {
|
if (encodeVoxelEditMessageDetails(type, 1, &details[i], &bufferOut[0], _maxPacketSize, sizeOut)) {
|
||||||
queueOctreeEditMessage(type, bufferOut, sizeOut);
|
queueOctreeEditMessage(type, bufferOut, sizeOut);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue