void OctreeHeadlessViewer::queryOctree() { char serverType = getMyNodeType(); PacketType packetType = getMyQueryMessageType(); if (_hasViewFrustum) { ConicalViewFrustums views { _viewFrustum }; _octreeQuery.setConicalViews(views); } else { _octreeQuery.clearConicalViews(); } auto nodeList = DependencyManager::get<NodeList>(); auto node = nodeList->soloNodeOfType(serverType); if (node && node->getActiveSocket()) { auto queryPacket = NLPacket::create(packetType); // encode the query data auto packetData = reinterpret_cast<unsigned char*>(queryPacket->getPayload()); int packetSize = _octreeQuery.getBroadcastData(packetData); queryPacket->setPayloadSize(packetSize); // make sure we still have an active socket nodeList->sendUnreliablePacket(*queryPacket, *node); } }
void EntityScriptServer::pushLogs() { std::string buffer; { Lock lock(logBufferMutex); std::swap(logBuffer, buffer); } if (buffer.empty()) { return; } if (_logListeners.empty()) { return; } auto nodeList = DependencyManager::get<NodeList>(); for (auto uuid : _logListeners) { auto node = nodeList->nodeWithUUID(uuid); if (node && node->getActiveSocket()) { auto packet = NLPacketList::create(PacketType::EntityServerScriptLog, QByteArray(), true, true); packet->write(buffer.data(), buffer.size()); nodeList->sendPacketList(std::move(packet), *node); } } }