86 lines
1.7 KiB
C++
86 lines
1.7 KiB
C++
#ifndef __UT_DDS_SERVICE_HPP__
|
|
#define __UT_DDS_SERVICE_HPP__
|
|
|
|
#include <unitree/common/service/base/service_base.hpp>
|
|
#include <unitree/common/service/base/service_config.hpp>
|
|
#include <unitree/common/dds/dds_easy_model.hpp>
|
|
|
|
namespace unitree
|
|
{
|
|
namespace common
|
|
{
|
|
class DdsService : public ServiceBase
|
|
{
|
|
public:
|
|
DdsService()
|
|
{
|
|
mLogger = GetLogger("/unitree/service/dds_service");
|
|
mQuit = false;
|
|
}
|
|
|
|
virtual ~DdsService()
|
|
{}
|
|
|
|
virtual void Register()
|
|
{}
|
|
|
|
virtual void Init()
|
|
{}
|
|
|
|
virtual void Start()
|
|
{}
|
|
|
|
virtual void Wait()
|
|
{
|
|
while (!mQuit) { sleep(1); }
|
|
}
|
|
|
|
virtual void Stop()
|
|
{
|
|
mQuit = true;
|
|
}
|
|
|
|
public:
|
|
void Parse(const std::string& configFileName)
|
|
{
|
|
ServiceBase::Parse(configFileName);
|
|
LOG_INFO(mLogger, "parse config success. filename:", configFileName);
|
|
|
|
mModel.Init(AnyCast<JsonMap>(GetGlobalParameter("DdsParameter")));
|
|
LOG_INFO(mLogger, "parse init dds model success.");
|
|
}
|
|
|
|
protected:
|
|
template<typename MSG>
|
|
void RegistTopicMessageHandler(const std::string& topic, const DdsMessageHandler& handler)
|
|
{
|
|
mModel.SetTopic<MSG>(topic, handler);
|
|
LOG_INFO(mLogger, "regist topic reader callback. topic:", topic);
|
|
}
|
|
|
|
template<typename MSG>
|
|
void RegistTopic(const std::string& topic)
|
|
{
|
|
mModel.SetTopic<MSG>(topic);
|
|
LOG_INFO(mLogger, "regist topic. topic:", topic);
|
|
}
|
|
|
|
/*
|
|
* Write message to topic
|
|
*/
|
|
template<typename MSG>
|
|
void WriteMessage(const std::string& topic, const MSG& message)
|
|
{
|
|
mModel.WriteMessage<MSG>(topic, message);
|
|
}
|
|
|
|
private:
|
|
bool mQuit;
|
|
DdsEasyModel mModel;
|
|
Logger* mLogger;
|
|
};
|
|
|
|
}
|
|
}
|
|
#endif//__UT_DDS_SERVICE_HPP__
|