17 #ifndef SCIP2_CONNECTION_H 18 #define SCIP2_CONNECTION_H 20 #include <boost/asio.hpp> 21 #include <boost/bind/bind.hpp> 36 boost::asio::streambuf &,
const boost::posix_time::ptime &)>;
38 const boost::posix_time::ptime &)>;
55 boost::asio::streambuf &buf,
56 const boost::posix_time::ptime &time_read)
63 using Ptr = std::shared_ptr<Connection>;
65 virtual void spin() = 0;
66 virtual void stop() = 0;
68 virtual void startWatchdog(
const boost::posix_time::time_duration &) = 0;
90 boost::asio::io_service
io_;
92 boost::asio::streambuf
buf_;
99 if (watchdog_duration_ == boost::posix_time::time_duration())
103 watchdog_.expires_from_now(watchdog_duration_);
104 watchdog_.async_wait(
111 std::cerr <<
"Watchdog timeout" << std::endl;
118 const auto time_read = boost::posix_time::microsec_clock::universal_time();
121 std::cerr <<
"Receive error" << std::endl;
131 const auto time_send = boost::posix_time::microsec_clock::universal_time();
134 std::cerr <<
"Send error" << std::endl;
144 boost::asio::async_read_until(
145 socket_, buf_,
"\n\n",
152 std::cerr <<
"Connection error" << std::endl;
164 std::cerr <<
"Connection timeout" << std::endl;
171 using Ptr = std::shared_ptr<ConnectionTcp>;
178 boost::asio::ip::tcp::endpoint endpoint(
179 boost::asio::ip::address::from_string(ip), port);
180 socket_.async_connect(
184 this, boost::asio::placeholders::error));
186 timeout_.expires_from_now(boost::posix_time::seconds(2));
190 this, boost::asio::placeholders::error));
203 boost::asio::async_write(
204 socket_, boost::asio::buffer(*buf),
207 this, boost::asio::placeholders::error, cb));
211 watchdog_duration_ = duration;
218 #endif // SCIP2_CONNECTION_H virtual void send(const std::string &, CallbackSend=CallbackSend())=0
boost::asio::deadline_timer watchdog_
std::shared_ptr< Connection > Ptr
void receive(boost::asio::streambuf &buf, const boost::posix_time::ptime &time_read)
boost::function< void(const boost::posix_time::ptime &)> CallbackSend
void onConnectTimeout(const boost::system::error_code &error)
void onConnect(const boost::system::error_code &error)
void onSend(const boost::system::error_code &error, CallbackSend cb)
boost::function< void(boost::asio::streambuf &, const boost::posix_time::ptime &)> CallbackReceive
void registerConnectCallback(CallbackConnect cb)
ConnectionTcp(const std::string &ip, const uint16_t port)
void startWatchdog(const boost::posix_time::time_duration &duration)
virtual void startWatchdog(const boost::posix_time::time_duration &)=0
void send(const std::string &data, CallbackSend cb=CallbackSend())
void registerReceiveCallback(CallbackReceive cb)
void onReceive(const boost::system::error_code &error)
boost::function< void(void)> CallbackConnect
boost::asio::ip::tcp::socket socket_
boost::function< void(void)> CallbackClose
void registerCloseCallback(CallbackClose cb)
void onWatchdog(const boost::system::error_code &error)
boost::asio::streambuf buf_
CallbackConnect cb_connect_
boost::asio::deadline_timer timeout_
boost::asio::io_service io_
boost::posix_time::time_duration watchdog_duration_
CallbackReceive cb_receive_