#include "XNDDSInterface.h" #include "XNObject_p.h" #include using json = nlohmann::json; XNByteArray XNDDSInterface::getUDPPackage() { XNByteArray result; size_t currentPos = 0; // 复制头部 if (headerSize >= 5) { result.append(header, 5); currentPos = 5; } // 复制数据 for (auto func : getByteArrayFunction) { if (currentPos + func.size <= MAX_UDP_PACKET_SIZE) { result.append(func.func()); currentPos += func.size; } else { break; // 超出最大包大小 } } // 更新包大小 if (currentPos >= 5) { result[4] = static_cast(currentPos); } return result; } std::unordered_map XNDDSInterface::getStringData(std::vector varNames) { std::unordered_map result; std::lock_guard lock(mutex); for (const auto &varName : varNames) { auto it = getDataFunction.find(varName); if (it == getDataFunction.end()) { continue; } result[varName] = it->second(); } return result; } void XNDDSInterface::setDataByString(std::unordered_map data) { clearOutData(); for (const auto &[varName, value] : data) { auto it = setDataFunction.find(varName); if (it == setDataFunction.end()) { continue; } it->second(value); } sendOutData(); }