ed
sync_plugin.cpp
Go to the documentation of this file.
1 #include "sync_plugin.h"
2 
3 #include <ros/node_handle.h>
4 
5 #include "ed_msgs/Query.h"
6 #include "ed/update_request.h"
7 #include "ed/world_model.h"
9 #include <ed/io/json_reader.h>
10 
11 // ----------------------------------------------------------------------------------------------------
12 
13 SyncPlugin::SyncPlugin() : rev_number_(0)
14 {
15 }
16 
17 // ----------------------------------------------------------------------------------------------------
18 
20 {
21 }
22 
23 // ----------------------------------------------------------------------------------------------------
24 
26 {
27  std::string server_name;
28  init.config.value("server", server_name);
29 
30  ros::NodeHandle nh;
31  sync_client_ = nh.serviceClient<ed_msgs::Query>(server_name);
32 }
33 
34 // ----------------------------------------------------------------------------------------------------
35 
37 {
38  ed_msgs::Query query;
39  query.request.since_revision = rev_number_;
40 
41  if (!sync_client_.call(query))
42  {
43  ROS_ERROR_STREAM("[ED SyncPlugin] Failed to call service '" << sync_client_.getService() << "'");
44  return;
45  }
46 
47  ed::io::JSONReader r(query.response.human_readable.c_str());
48 
49  if (!r.ok())
50  {
51  ROS_ERROR_STREAM("[ED SyncPlugin] Could not parse query response received from '" << sync_client_.getService() << "': " << query.response);
52  return;
53  }
54 
55 // std::cout << "Response size: " << query.response.human_readable.size() << std::endl;
56 
57  ed::deserialize(r, req);
58 
59  if (!r.ok())
60  {
61  ROS_ERROR_STREAM("[ED SyncPlugin] Invalid query response from '" << sync_client_.getService() << "': " << r.error());
62 
63  // Clear update request
64  req = ed::UpdateRequest();
65  }
66  else
67  {
68  rev_number_ = query.response.new_revision;
69  }
70 }
71 
72 // ----------------------------------------------------------------------------------------------------
73 
SyncPlugin::process
void process(const ed::PluginInput &data, ed::UpdateRequest &req)
Definition: sync_plugin.cpp:36
ed::UpdateRequest
Definition: update_request.h:24
std::string
ed::deserialize
bool deserialize(io::Reader &r, UpdateRequest &req)
Definition: serialization.cpp:37
ED_REGISTER_PLUGIN
#define ED_REGISTER_PLUGIN(Derived)
Definition: plugin.h:5
ed::io::JSONReader
Definition: json_reader.h:16
SyncPlugin
Definition: sync_plugin.h:8
ed::InitData
Definition: init_data.h:12
ed::InitData::config
tue::Configuration & config
Definition: init_data.h:18
update_request.h
SyncPlugin::rev_number_
uint64_t rev_number_
Definition: sync_plugin.h:23
SyncPlugin::sync_client_
ros::ServiceClient sync_client_
Definition: sync_plugin.h:25
json_reader.h
ed::io::JSONReader::ok
bool ok()
Definition: json_reader.h:38
ed::PluginInput
Definition: plugin.h:19
ed::io::JSONReader::error
std::string error()
Definition: json_reader.h:40
SyncPlugin::~SyncPlugin
virtual ~SyncPlugin()
Definition: sync_plugin.cpp:19
SyncPlugin::SyncPlugin
SyncPlugin()
Definition: sync_plugin.cpp:13
tue::config::ReaderWriter::value
bool value(const std::string &name, T &value, RequiredOrOptional opt=REQUIRED)
serialization.h
ed::Plugin::initialize
virtual void initialize()
Definition: plugin.h:39
world_model.h
sync_plugin.h