diff --git a/modules/catkin_ws/src/PC/include/Logger.h b/modules/catkin_ws/src/PC/include/Logger.h index 863493d7f05490f3b08bdf9f6a155b2e32939adf..a78e9897e9cea9441425b54919fde1992dbfda0a 100644 --- a/modules/catkin_ws/src/PC/include/Logger.h +++ b/modules/catkin_ws/src/PC/include/Logger.h @@ -12,7 +12,9 @@ namespace pc { -class Logger : public std::enable_shared_from_this<Logger> +class Logger + : public std::enable_shared_from_this<Logger> + , private networking::Busyable { private: struct PrivateTag @@ -35,15 +37,31 @@ public: static Ptr create(networking::Networking & net, const std::string & host) { return std::make_shared<Logger>(PrivateTag{}, net, host); } - Logger(PrivateTag, networking::Networking & net, const std::string & host) + Logger(PrivateTag, networking::Networking & net, const std::string & host); + + void start(); + + void stop(); private: + struct AsyncState + { + using Ptr = std::shared_ptr<AsyncState>; + + AsyncState(Logger::Ptr self) + : lock(*self), self(self) + {} + + networking::BusyLock lock; + Logger::Ptr self; + }; + networking::Networking & net; std::string host; - LoggingClient::Ptr loggingClient; + LoggingClient::Ptr client; networking::time::Timer::Ptr timer; - void log(); + void log(AsyncState::Ptr state); }; } diff --git a/modules/catkin_ws/src/PC/src/Logger.cpp b/modules/catkin_ws/src/PC/src/Logger.cpp index 893a4bbb11b4bfa89c6e75b2a6f08190cf6fdb6e..e8cb7d910c3eff1ee53ff06763771372049d2dfb 100644 --- a/modules/catkin_ws/src/PC/src/Logger.cpp +++ b/modules/catkin_ws/src/PC/src/Logger.cpp @@ -3,32 +3,44 @@ // #include "../include/Logger.h" +#include <iostream> namespace pc { -void Logger::log() +Logger::Logger(Logger::PrivateTag, networking::Networking & net, const std::string & host) + : net(net), host(host) +{ + client = LoggingClient::create(net, MAX_MESSAGE_SIZE); + timer = networking::time::Timer::create(net); +} + +void Logger::start() +{ + auto self = shared_from_this(); + auto state = std::make_shared<AsyncState>(self); + log(state); +} + +void Logger::stop() +{ + timer->stop(); + client->stop(); +} + +void Logger::log(AsyncState::Ptr state) { using namespace std::chrono_literals; std::string emptyRequest; - auto self = shared_from_this(); - loggingClient->asyncCall( + client->asyncCall( emptyRequest, host, PORT, 10s, - [self](const auto & error, auto & responseMessage) + [state](const auto & error, auto & responseMessage) { std::cout << responseMessage; - self->timer->startTimeout(1ms, [self] - { self->log; }); + state->self->timer->startTimeout(1ms, [state] + { state->self->log(state); }); }); } -Logger::Logger(Logger::PrivateTag, networking::Networking & net, const std::string & host) - : net(net), host(host) -{ - loggingClient = LoggingClient::create(net, MAX_MESSAGE_SIZE); - timer = networking::time::Timer::create(net); - log(); -} - } diff --git a/modules/catkin_ws/src/PC/src/main.cpp b/modules/catkin_ws/src/PC/src/main.cpp index a559f51becab2bcff45da6264722c93c0a179c11..4ca09fdcca6728bdacb319b50888527860e547c2 100644 --- a/modules/catkin_ws/src/PC/src/main.cpp +++ b/modules/catkin_ws/src/PC/src/main.cpp @@ -7,8 +7,9 @@ int main() using namespace std::chrono_literals; float speed = 0.0f; networking::Networking net; + const std::string host{"10.5.37.195"}; - pc2car::CommandSender commandSender{net, "10.5.37.195"}; + pc2car::CommandSender commandSender{net, host}; auto commandTimer = networking::time::Timer::create(net); commandTimer->startPeriodicTimeout( 1s, @@ -18,7 +19,8 @@ int main() speed += 1.0f; }); - auto logger = pc::Logger::create(net, "10.5.37.195"); + auto logger = pc::Logger::create(net, host); + logger->start(); for (;;); return 0; diff --git a/modules/catkin_ws/src/car/include/logging/Logging.h b/modules/catkin_ws/src/car/include/logging/Logging.h index 25ef4c0fdd0e782db13f0d5c88bb19d37720216a..93aa686c8c8292a10ded1617af237f3980756f6b 100644 --- a/modules/catkin_ws/src/car/include/logging/Logging.h +++ b/modules/catkin_ws/src/car/include/logging/Logging.h @@ -29,6 +29,7 @@ class Logging : public nodelet::Nodelet public: static constexpr std::size_t PORT{10207}; static constexpr std::size_t MAX_MESSAGE_SIZE{1024}; + static constexpr std::size_t MAX_BUFFER_SIZE{0x100000}; // 1MB void onInit() override; diff --git a/modules/catkin_ws/src/car/src/logging/Logging.cpp b/modules/catkin_ws/src/car/src/logging/Logging.cpp index 9684e6f243a3a544c1c8376eb041da976cc15736..128b4ab5284c9ccb0870dc9d82984a5e1073245e 100644 --- a/modules/catkin_ws/src/car/src/logging/Logging.cpp +++ b/modules/catkin_ws/src/car/src/logging/Logging.cpp @@ -14,15 +14,18 @@ namespace car constexpr std::size_t Logging::PORT; constexpr std::size_t Logging::MAX_MESSAGE_SIZE; +constexpr std::size_t Logging::MAX_BUFFER_SIZE; Logging::Logging(ros::NodeHandle & nh, std::string & name) : nh_(nh) , name_(name) + , loggingBuffer(MAX_BUFFER_SIZE) , loggingStream(&loggingBuffer) {} Logging::Logging() - : loggingStream(&loggingBuffer) + : loggingBuffer(MAX_BUFFER_SIZE) + , loggingStream(&loggingBuffer) {} Logging::~Logging()