XNSim/XNCore/XNDDSInterface.cpp
2025-05-22 08:53:29 +08:00

66 lines
1.3 KiB
C++

#include "XNDDSInterface.h"
#include "XNObject_p.h"
#include <nlohmann/json.hpp>
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<uint8_t>(currentPos);
}
return result;
}
std::unordered_map<std::string, std::string>
XNDDSInterface::getStringData(std::vector<std::string> varNames)
{
std::unordered_map<std::string, std::string> result;
std::lock_guard<std::mutex> 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<std::string, std::string> data)
{
clearOutData();
for (const auto &[varName, value] : data) {
auto it = setDataFunction.find(varName);
if (it == setDataFunction.end()) {
continue;
}
it->second(value);
}
sendOutData();
}