send VOXEL_QUERY to out of view voxel servers with PPS of 0

This commit is contained in:
ZappoMan 2013-10-28 12:07:02 -07:00
parent 0095259adf
commit 1c2e5eecd6

View file

@ -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) { 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... // set our preferred PPS to be exactly evenly divided among all of the voxel servers...
int perServerPPS = DEFAULT_MAX_VOXEL_PPS/voxelServerCount; int perServerPPS = DEFAULT_MAX_VOXEL_PPS/voxelServerCount;
_voxelQuery.setMaxVoxelPacketsPerSecond(perServerPPS);
UDPSocket* nodeSocket = NodeList::getInstance()->getNodeSocket(); UDPSocket* nodeSocket = NodeList::getInstance()->getNodeSocket();
for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) { for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) {
// only send to the NodeTypes that are NODE_TYPE_VOXEL_SERVER // only send to the NodeTypes that are NODE_TYPE_VOXEL_SERVER
@ -2412,25 +2410,30 @@ void Application::queryVoxels() {
ViewFrustum::location serverFrustumLocation = _viewFrustum.boxInFrustum(serverBounds); ViewFrustum::location serverFrustumLocation = _viewFrustum.boxInFrustum(serverBounds);
if (serverFrustumLocation != ViewFrustum::OUTSIDE) { if (serverFrustumLocation != ViewFrustum::OUTSIDE) {
// set up the packet for sending... //printf("_voxelQuery.setMaxVoxelPacketsPerSecond(perServerPPS=%d)\n",perServerPPS);
unsigned char* endOfVoxelQueryPacket = voxelQueryPacket; _voxelQuery.setMaxVoxelPacketsPerSecond(perServerPPS);
} else {
// insert packet type/version and node UUID //printf("_voxelQuery.setMaxVoxelPacketsPerSecond(0)\n");
endOfVoxelQueryPacket += populateTypeAndVersion(endOfVoxelQueryPacket, PACKET_TYPE_VOXEL_QUERY); _voxelQuery.setMaxVoxelPacketsPerSecond(0);
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);
} }
// 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);
} }
} }
} }