change to new packet sending in Application

This commit is contained in:
Stephen Birarda 2015-07-07 11:11:20 -07:00
parent edf7a96b58
commit e05470a11c

View file

@ -2661,7 +2661,8 @@ int Application::sendNackPackets() {
} }
int packetsSent = 0; int packetsSent = 0;
char packet[MAX_PACKET_SIZE];
auto nackPacket { NLPacket::create(PacketType::OctreeDataNack); }
// iterates thru all nodes in NodeList // iterates thru all nodes in NodeList
auto nodeList = DependencyManager::get<NodeList>(); auto nodeList = DependencyManager::get<NodeList>();
@ -2698,33 +2699,26 @@ int Application::sendNackPackets() {
QSet<OCTREE_PACKET_SEQUENCE>::const_iterator missingSequenceNumbersIterator = missingSequenceNumbers.constBegin(); QSet<OCTREE_PACKET_SEQUENCE>::const_iterator missingSequenceNumbersIterator = missingSequenceNumbers.constBegin();
while (numSequenceNumbersAvailable > 0) { while (numSequenceNumbersAvailable > 0) {
char* dataAt = packet; // reset the position we are writing at and the size we have used
int bytesRemaining = MAX_PACKET_SIZE; nackPacket->seek(0);
nackPacket->setSizeUsed(0);
// pack header
int numBytesPacketHeader = nodeList->populatePacketHeader(packet, PacketTypeOctreeDataNack);
dataAt += numBytesPacketHeader;
bytesRemaining -= numBytesPacketHeader;
// calculate and pack the number of sequence numbers // calculate and pack the number of sequence numbers
int numSequenceNumbersRoomFor = (bytesRemaining - sizeof(uint16_t)) / sizeof(OCTREE_PACKET_SEQUENCE); int numSequenceNumbersRoomFor = (nackPacket->size() - sizeof(uint16_t)) / sizeof(OCTREE_PACKET_SEQUENCE);
uint16_t numSequenceNumbers = min(numSequenceNumbersAvailable, numSequenceNumbersRoomFor); uint16_t numSequenceNumbers = min(numSequenceNumbersAvailable, numSequenceNumbersRoomFor);
uint16_t* numSequenceNumbersAt = (uint16_t*)dataAt;
*numSequenceNumbersAt = numSequenceNumbers; nackPacket->write(&numSequenceNumbers, sizeof(numSequenceNumbers));
dataAt += sizeof(uint16_t);
// pack sequence numbers // pack sequence numbers
for (int i = 0; i < numSequenceNumbers; i++) { for (int i = 0; i < numSequenceNumbers; i++) {
OCTREE_PACKET_SEQUENCE* sequenceNumberAt = (OCTREE_PACKET_SEQUENCE*)dataAt; OCTREE_PACKET_SEQUENCE missingNumber = *missingSequenceNumbersIterator;
*sequenceNumberAt = *missingSequenceNumbersIterator; nackPacket->write(&missingNumber, sizeof(OCTREE_PACKET_SEQUENCE));
dataAt += sizeof(OCTREE_PACKET_SEQUENCE);
missingSequenceNumbersIterator++; missingSequenceNumbersIterator++;
} }
numSequenceNumbersAvailable -= numSequenceNumbers; numSequenceNumbersAvailable -= numSequenceNumbers;
// send it // send the packet
nodeList->writeUnverifiedDatagram(packet, dataAt - packet, node); nodeList->sendUnreliablePacket(packet, node);
packetsSent++; packetsSent++;
} }
} }
@ -2756,9 +2750,7 @@ void Application::queryOctree(NodeType_t serverType, PacketType::Value packetTyp
_octreeQuery.setOctreeSizeScale(lodManager->getOctreeSizeScale()); _octreeQuery.setOctreeSizeScale(lodManager->getOctreeSizeScale());
_octreeQuery.setBoundaryLevelAdjust(lodManager->getBoundaryLevelAdjust()); _octreeQuery.setBoundaryLevelAdjust(lodManager->getBoundaryLevelAdjust());
unsigned char queryPacket[MAX_PACKET_SIZE]; // Iterate all of the nodes, and get a count of how many octree servers we have...
// Iterate all of the nodes, and get a count of how many voxel servers we have...
int totalServers = 0; int totalServers = 0;
int inViewServers = 0; int inViewServers = 0;
int unknownJurisdictionServers = 0; int unknownJurisdictionServers = 0;
@ -2825,6 +2817,8 @@ void Application::queryOctree(NodeType_t serverType, PacketType::Value packetTyp
qCDebug(interfaceapp, "perServerPPS: %d perUnknownServer: %d", perServerPPS, perUnknownServer); qCDebug(interfaceapp, "perServerPPS: %d perUnknownServer: %d", perServerPPS, perUnknownServer);
} }
auto queryPacket { NLPacket::create(packetType); }
nodeList->eachNode([&](const SharedNodePointer& node){ nodeList->eachNode([&](const SharedNodePointer& node){
// only send to the NodeTypes that are serverType // only send to the NodeTypes that are serverType
if (node->getActiveSocket() && node->getType() == serverType) { if (node->getActiveSocket() && node->getType() == serverType) {
@ -2899,19 +2893,13 @@ void Application::queryOctree(NodeType_t serverType, PacketType::Value packetTyp
} else { } else {
_octreeQuery.setMaxQueryPacketsPerSecond(0); _octreeQuery.setMaxQueryPacketsPerSecond(0);
} }
// set up the packet for sending...
unsigned char* endOfQueryPacket = queryPacket;
// insert packet type/version and node UUID // encode the query data
endOfQueryPacket += nodeList->populatePacketHeader(reinterpret_cast<char*>(endOfQueryPacket), packetType); int packetSize = _octreeQuery.getBroadcastData(queryPacket.payload());
queryPacket.setSizeUsed(packetSize);
// encode the query data...
endOfQueryPacket += _octreeQuery.getBroadcastData(endOfQueryPacket);
int packetLength = endOfQueryPacket - queryPacket;
// make sure we still have an active socket // make sure we still have an active socket
nodeList->writeUnverifiedDatagram(reinterpret_cast<const char*>(queryPacket), packetLength, node); nodeList->sendUnreliablePacket(queryPacket, node);
} }
}); });
} }