heartbeat.h 1.57 KB
Newer Older
1 2 3 4 5 6 7
#pragma once

#include "ros_bridge/rapidjson/include/rapidjson/document.h"

namespace ros_bridge {
//! @brief Namespace containing classes and methodes ros message generation.
namespace messages {
Valentin Platzgummer's avatar
Valentin Platzgummer committed
8 9
//! @brief Namespace containing classes and methodes for geometry_msgs
//! generation.
10
namespace nemo_msgs {
Valentin Platzgummer's avatar
Valentin Platzgummer committed
11 12
//! @brief Namespace containing methodes for geometry_msgs/GeoPoint message
//! generation.
13 14
namespace heartbeat {

15
std::string messageType();
16 17

//! @brief C++ representation of nemo_msgs/Heartbeat message
Valentin Platzgummer's avatar
Valentin Platzgummer committed
18
class Heartbeat {
19
public:
Valentin Platzgummer's avatar
Valentin Platzgummer committed
20 21 22 23 24 25 26 27 28
  Heartbeat() : _status(0) {}
  Heartbeat(int status) : _status(status) {}
  Heartbeat(const Heartbeat &heartbeat) : _status(heartbeat.status()) {}

  bool operator==(const Heartbeat &hb) { return hb._status == this->_status; }
  bool operator!=(const Heartbeat &hb) { return !operator==(hb); }

  virtual int status(void) const { return _status; }
  virtual void setStatus(int status) { _status = status; }
29 30

protected:
Valentin Platzgummer's avatar
Valentin Platzgummer committed
31
  int _status;
32 33 34
};

template <class HeartbeatType>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
35 36 37 38
bool toJson(const HeartbeatType &heartbeat, rapidjson::Value &value,
            rapidjson::Document::AllocatorType &allocator) {
  value.AddMember("status", std::int32_t(heartbeat.status()), allocator);
  return true;
39 40 41
}

template <class HeartbeatType>
Valentin Platzgummer's avatar
Valentin Platzgummer committed
42 43 44 45 46 47 48 49
bool fromJson(const rapidjson::Value &value, HeartbeatType &heartbeat) {
  if (!value.HasMember("status") || !value["status"].IsInt()) {
    assert(false);
    return false;
  }

  heartbeat.setStatus(value["status"].GetInt());
  return true;
50 51 52 53 54 55
}

} // namespace heartbeat
} // namespace nemo_msgs
} // namespace messages
} // namespace ros_bridge