From 1c2e5eecd6a231a8369a283d6dbe512a9157b0c6 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 28 Oct 2013 12:07:02 -0700 Subject: [PATCH] send VOXEL_QUERY to out of view voxel servers with PPS of 0 --- interface/src/Application.cpp | 47 +++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 952f6fff8c..f38bb2fc8e 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2381,16 +2381,14 @@ void Application::queryVoxels() { } } - // make sure there's at least one voxel server + // assume there's at least one voxel server if (voxelServerCount < 1) { - return; // no voxel servers to talk to, we can bail. + voxelServerCount = 1; } // set our preferred PPS to be exactly evenly divided among all of the voxel servers... int perServerPPS = DEFAULT_MAX_VOXEL_PPS/voxelServerCount; - _voxelQuery.setMaxVoxelPacketsPerSecond(perServerPPS); - UDPSocket* nodeSocket = NodeList::getInstance()->getNodeSocket(); for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) { // only send to the NodeTypes that are NODE_TYPE_VOXEL_SERVER @@ -2412,25 +2410,30 @@ void Application::queryVoxels() { ViewFrustum::location serverFrustumLocation = _viewFrustum.boxInFrustum(serverBounds); if (serverFrustumLocation != ViewFrustum::OUTSIDE) { - // set up the packet for sending... - unsigned char* endOfVoxelQueryPacket = voxelQueryPacket; - - // insert packet type/version and node UUID - endOfVoxelQueryPacket += populateTypeAndVersion(endOfVoxelQueryPacket, PACKET_TYPE_VOXEL_QUERY); - QByteArray ownerUUID = nodeList->getOwnerUUID().toRfc4122(); - memcpy(endOfVoxelQueryPacket, ownerUUID.constData(), ownerUUID.size()); - endOfVoxelQueryPacket += ownerUUID.size(); - - // encode the query data... - endOfVoxelQueryPacket += _voxelQuery.getBroadcastData(endOfVoxelQueryPacket); - - int packetLength = endOfVoxelQueryPacket - voxelQueryPacket; - - nodeSocket->send(node->getActiveSocket(), voxelQueryPacket, packetLength); - - // Feed number of bytes to corresponding channel of the bandwidth meter - _bandwidthMeter.outputStream(BandwidthMeter::VOXELS).updateValue(packetLength); + //printf("_voxelQuery.setMaxVoxelPacketsPerSecond(perServerPPS=%d)\n",perServerPPS); + _voxelQuery.setMaxVoxelPacketsPerSecond(perServerPPS); + } else { + //printf("_voxelQuery.setMaxVoxelPacketsPerSecond(0)\n"); + _voxelQuery.setMaxVoxelPacketsPerSecond(0); } + // set up the packet for sending... + unsigned char* endOfVoxelQueryPacket = voxelQueryPacket; + + // insert packet type/version and node UUID + endOfVoxelQueryPacket += populateTypeAndVersion(endOfVoxelQueryPacket, PACKET_TYPE_VOXEL_QUERY); + QByteArray ownerUUID = nodeList->getOwnerUUID().toRfc4122(); + memcpy(endOfVoxelQueryPacket, ownerUUID.constData(), ownerUUID.size()); + endOfVoxelQueryPacket += ownerUUID.size(); + + // encode the query data... + endOfVoxelQueryPacket += _voxelQuery.getBroadcastData(endOfVoxelQueryPacket); + + int packetLength = endOfVoxelQueryPacket - voxelQueryPacket; + + nodeSocket->send(node->getActiveSocket(), voxelQueryPacket, packetLength); + + // Feed number of bytes to corresponding channel of the bandwidth meter + _bandwidthMeter.outputStream(BandwidthMeter::VOXELS).updateValue(packetLength); } } }