Showing the changes to interface/src/Application.cpp (1 of 4 files). Show all
Unified · Split
| @@ -2107,6 +2107,21 @@ void Application::updateMyAvatar(float deltaTime) { · 2106 unmodified lines | ||
| 2107 | 2107 | } |
| 2108 | 2108 | } |
| 2109 | 2109 | |
| 2110 | +/*/ Attempt to identify the sender from it's address. | |
| 2111 | + if (sendingNode) { | |
| 2112 | + QUuid nodeUUID = sendingNode->getUUID(); | |
| 2113 | + | |
| 2114 | + // now that we know the node ID, let's add these stats to the stats for that node... | |
| 2115 | + _octreeSceneStatsLock.lockForWrite(); | |
| 2116 | + if (_octreeServerSceneStats.find(nodeUUID) != _octreeServerSceneStats.end()) { | |
| 2117 | + OctreeSceneStats& stats = _octreeServerSceneStats[nodeUUID]; | |
| 2118 | + stats.trackIncomingOctreePacket(packet, wasStatsPacket, sendingNode->getClockSkewUsec()); | |
| 2119 | + } | |
| 2120 | + _octreeSceneStatsLock.unlock(); | |
| 2121 | + } | |
| 2122 | + */ | |
| 2123 | + | |
| 2124 | + | |
| 2110 | 2125 | |
| 2111 | 2126 | void Application::sendNack() { |
| 2112 | 2127 | |
| @@ -2122,13 +2137,6 @@ void Application::sendNack() { · 9 unmodified lines | ||
| 2122 | 2137 | || node->getType() == NodeType::ModelServer) |
| 2123 | 2138 | ) { |
| 2124 | 2139 | |
| 2125 | − //_octreeSceneStatsLock.lockForWrite(); | |
| 2126 | − | |
| 2127 | − OctreeSceneStats& stats = _octreeServerSceneStats[node->getUUID()]; | |
| 2128 | − int numSequenceNumbersAvailable = stats.getNumSequenceNumbersToNack(); | |
| 2129 | − if (numSequenceNumbersAvailable == 0) | |
| 2130 | − continue; | |
| 2131 | − | |
| 2132 | 2140 | char* dataAt = packet; |
| 2133 | 2141 | int bytesRemaining = MAX_PACKET_SIZE; |
| 2134 | 2142 | |
| @@ -2136,28 +2144,39 @@ void Application::sendNack() { · 1 unmodified line | ||
| 2136 | 2144 | int numBytesPacketHeader = populatePacketHeader(packet, PacketTypeOctreeDataNack); |
| 2137 | 2145 | dataAt += numBytesPacketHeader; |
| 2138 | 2146 | bytesRemaining -= numBytesPacketHeader; |
| 2147 | + int numSequenceNumbersRoomFor = (bytesRemaining - sizeof(uint16_t)) / sizeof(OCTREE_PACKET_SEQUENCE); | |
| 2139 | 2148 | |
| 2140 | − int numPacketsRoomFor = (bytesRemaining - sizeof(uint16_t)) / sizeof(OCTREE_PACKET_SEQUENCE); | |
| 2141 | 2149 | |
| 2150 | + QUuid nodeUUID = node->getUUID(); | |
| 2142 | 2151 | |
| 2143 | − // calculate and pack number of sequence numbers | |
| 2144 | − uint16_t numSequenceNumbers = min(numSequenceNumbersAvailable, numPacketsRoomFor); | |
| 2145 | − uint16_t* numSequenceNumbersAt = (uint16_t*)dataAt; | |
| 2146 | − *numSequenceNumbersAt = numSequenceNumbers; | |
| 2147 | − dataAt += sizeof(uint16_t); | |
| 2152 | + _octreeSceneStatsLock.lockForWrite(); | |
| 2153 | + if (_octreeServerSceneStats.find(nodeUUID) != _octreeServerSceneStats.end()) { | |
| 2154 | + OctreeSceneStats& stats = _octreeServerSceneStats[nodeUUID]; | |
| 2155 | + | |
| 2156 | + int numSequenceNumbersAvailable = stats.getNumSequenceNumbersToNack(); | |
| 2157 | + if (numSequenceNumbersAvailable == 0) { | |
| 2158 | + _octreeSceneStatsLock.unlock(); | |
| 2159 | + continue; | |
| 2160 | + } | |
| 2148 | 2161 | |
| 2149 | − // pack sequence numbers | |
| 2150 | −//printf("\n\t sending nack...\n"); | |
| 2151 | −//printf("\t\t packed %d seq #s:", numSequenceNumbers); | |
| 2152 | − for (int i = 0; i < numSequenceNumbers; i++) { | |
| 2153 | − OCTREE_PACKET_SEQUENCE* sequenceNumberAt = (OCTREE_PACKET_SEQUENCE*)dataAt; | |
| 2154 | − *sequenceNumberAt = stats.getNextSequenceNumberToNack(); | |
| 2155 | − dataAt += sizeof(OCTREE_PACKET_SEQUENCE); | |
| 2156 | −//printf(" %d,", *sequenceNumberAt); | |
| 2162 | + // calculate and pack number of sequence numbers | |
| 2163 | + uint16_t numSequenceNumbers = min(numSequenceNumbersAvailable, numSequenceNumbersRoomFor); | |
| 2164 | + uint16_t* numSequenceNumbersAt = (uint16_t*)dataAt; | |
| 2165 | + *numSequenceNumbersAt = numSequenceNumbers; | |
| 2166 | + dataAt += sizeof(uint16_t); | |
| 2167 | + | |
| 2168 | + // pack sequence numbers | |
| 2169 | + //printf("\n\t sending nack...\n"); | |
| 2170 | + //printf("\t\t packed %d seq #s:", numSequenceNumbers); | |
| 2171 | + for (int i = 0; i < numSequenceNumbers; i++) { | |
| 2172 | + OCTREE_PACKET_SEQUENCE* sequenceNumberAt = (OCTREE_PACKET_SEQUENCE*)dataAt; | |
| 2173 | + *sequenceNumberAt = stats.getNextSequenceNumberToNack(); | |
| 2174 | + dataAt += sizeof(OCTREE_PACKET_SEQUENCE); | |
| 2175 | + //printf(" %d,", *sequenceNumberAt); | |
| 2176 | + } | |
| 2177 | + //printf("\n"); | |
| 2157 | 2178 | } |
| 2158 | −//printf("\n"); | |
| 2159 | − | |
| 2160 | − //_octreeSceneStatsLock.unlock(); | |
| 2179 | + _octreeSceneStatsLock.unlock(); | |
| 2161 | 2180 | |
| 2162 | 2181 | // make sure we still have an active socket???? |
| 2163 | 2182 | nodeList->writeUnverifiedDatagram(packet, dataAt-packet, node); |