ip_listener.cpp
Go to the documentation of this file.
1 #include "ip_listener.h"
2 #include <ros/console.h>
3 
4 using namespace boost::asio;
5 
6 IPListener::IPListener(const std::string& ip, uint16_t port) : ip(ip), port(port) {}
7 
9 {
10  service.stop();
11  asioThread.join();
12 }
13 
14 void IPListener::onNewDataReceived(const boost::system::error_code& error,
15  std::size_t bytes_transfered)
16 {
17 
18  if(error == boost::asio::error::operation_aborted)
19  {
20  // Will happen when we close the socket
21  return;
22  }
23  else if(error)
24  {
25  // We don't publish a diagnostics here, they will be handled in an higher level.
26  // If there is an error, there is no parse, so diagnostic updater will detect it.
27  ROS_WARN_STREAM("Error occurs in IP Listener : " << error.message());
28  }
29  else
30  {
31  ROS_DEBUG_STREAM("Received StdBin data");
32  // No errors, we can parse it :
33  try
34  {
35  parser.addNewData(datas.data(), bytes_transfered);
36  while(parser.parseNextFrame())
37  {
38  auto navData = parser.getLastNavData();
39  auto headerData = parser.getLastHeaderData();
40  rosPublisher.onNewStdBinData(navData, headerData);
41  }
42  }
43  catch(const std::runtime_error& e)
44  {
45  ROS_WARN_STREAM("Parse error : " << e.what());
46  // TODO : Publish a diagnostic
47  }
48  }
50 }
boost::asio::io_service service
Definition: ip_listener.h:45
void onNewDataReceived(const boost::system::error_code &error, std::size_t bytes_transfered)
Definition: ip_listener.cpp:14
void onNewStdBinData(const ixblue_stdbin_decoder::Data::BinaryNav &navData, const ixblue_stdbin_decoder::Data::NavHeader &headerData)
void addNewData(const uint8_t *data, std::size_t length)
Data::BinaryNav getLastNavData(void) const
virtual void listenNextData(void)=0
Data::NavHeader getLastHeaderData(void) const
std::thread asioThread
Definition: ip_listener.h:46
#define ROS_WARN_STREAM(args)
boost::array< uint8_t, 8192 > datas
Definition: ip_listener.h:44
#define ROS_DEBUG_STREAM(args)
ixblue_stdbin_decoder::StdBinDecoder parser
Definition: ip_listener.h:42
ROSPublisher rosPublisher
Definition: ip_listener.h:47
virtual ~IPListener()
Definition: ip_listener.cpp:8
IPListener()=delete


ixblue_ins_driver
Author(s): Adrien BARRAL , Laure LE BRETON
autogenerated on Wed Jan 27 2021 03:37:01