nodemanager/data/MonitoringPacket.h (71 lines of code) (raw):
#ifndef MONITORINGPACKET_H
#define MONITORINGPACKET_H
#include <boost/uuid/uuid.hpp>
#include "../utils/Logger.h"
#include "Umid.h"
using namespace hpc::utils;
namespace hpc
{
namespace data
{
using namespace boost::uuids;
template<int UmidCount>
class MonitoringPacket
{
public:
struct Guid
{
uint32_t g3:8;
uint32_t g2:8;
uint32_t g1:8;
uint32_t g0:8;
uint16_t g5:8;
uint16_t g4:8;
uint16_t g7:8;
uint16_t g6:8;
uint8_t g8:8;
uint8_t g9:8;
uint8_t g10:8;
uint8_t g11:8;
uint8_t g12:8;
uint8_t g13:8;
uint8_t g14:8;
uint8_t g15:8;
void AssignFrom(const uuid& id)
{
Logger::Debug("UUID variant rfc {0}", id.variant() == id.variant_rfc_4122);
g0 = id.data[0]; g1 = id.data[1]; g2 = id.data[2]; g3 = id.data[3];
g4 = id.data[4]; g5 = id.data[5]; g6 = id.data[6]; g7 = id.data[7];
g8 = id.data[8]; g9 = id.data[9]; g10 = id.data[10]; g11 = id.data[11];
g12 = id.data[12]; g13 = id.data[13]; g14 = id.data[14]; g15 = id.data[15];
}
};
MonitoringPacket(int version) : Version(version)
{
}
std::vector<unsigned char> ToByteArray(size_t size) const
{
std::vector<unsigned char> packetData(size);
memcpy(&packetData[0], this, std::min(sizeof(*this), size));
return std::move(packetData);
}
void ClearData()
{
for (int i = 0; i < UmidCount; i++)
{
Umids[i] = Umid(0, 0);
Values[i] = 0.0f;
}
}
int Version;
Guid Uuid;
int Count;
int TickCount;
Umid Umids[UmidCount];
float Values[UmidCount];
protected:
private:
};
}
}
#endif // MONITORINGPACKET_H