From 2e31a030ba063252c3d42662af894ea35bb0d2be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20M=C3=BCller?= <d_muel20@uni-muenster.de> Date: Fri, 30 Nov 2018 17:39:26 +0100 Subject: [PATCH] * Some updates to the Barista Task --- Grinder/Version.h | 2 +- Grinder/task/tasks/BaristaProtocol.h | 6 +++++- Grinder/task/tasks/BaristaTask.cpp | 18 ++++++++++++++---- Grinder/task/tasks/BaristaTask.h | 7 ++++++- Grinder/task/tasks/BaristaTrainingTask.cpp | 16 +++++++++------- Grinder/task/tasks/BaristaTrainingTask.h | 4 ++-- Grinder/ui/task/TaskWidget.cpp | 3 ++- 7 files changed, 39 insertions(+), 17 deletions(-) diff --git a/Grinder/Version.h b/Grinder/Version.h index bb9b2eb..3989e7f 100644 --- a/Grinder/Version.h +++ b/Grinder/Version.h @@ -17,7 +17,7 @@ #define GRNDR_VERSION_MAJOR 0 #define GRNDR_VERSION_MINOR 10 #define GRNDR_VERSION_REVISION 0 -#define GRNDR_VERSION_BUILD 290 +#define GRNDR_VERSION_BUILD 291 namespace grndr { diff --git a/Grinder/task/tasks/BaristaProtocol.h b/Grinder/task/tasks/BaristaProtocol.h index abbdef9..97dd237 100644 --- a/Grinder/task/tasks/BaristaProtocol.h +++ b/Grinder/task/tasks/BaristaProtocol.h @@ -7,9 +7,13 @@ #define BARISTAPROTOCOL_H #define BARISTA_COMMAND_SETLIBRARY "setlibrarypath" + #define BARISTA_COMMAND_STARTTRAINING "starttraining" -#define BARISTA_COMMAND_UPDATE "iterationupdate" +#define BARISTA_COMMAND_PAUSETRAINING "pausetraining" +#define BARISTA_COMMAND_RESUMETRAINING "starttraining" #define BARISTA_COMMAND_TRAININGDONE "trainingfinished" +#define BARISTA_COMMAND_UPDATE "iterationupdate" + #define BARISTA_COMMAND_SHUTDOWN "shutdown" #endif diff --git a/Grinder/task/tasks/BaristaTask.cpp b/Grinder/task/tasks/BaristaTask.cpp index 50d13e6..7b4a34c 100644 --- a/Grinder/task/tasks/BaristaTask.cpp +++ b/Grinder/task/tasks/BaristaTask.cpp @@ -38,6 +38,16 @@ void BaristaTask::deserialize(DeserializationContext& ctx) _libraryPath = ctx.settings()(Serialization_Value_LibraryPath).toString(); } +void BaristaTask::execute() +{ + initiateBaristaConnection(); +} + +void BaristaTask::stop() +{ + shutdownBaristaConnection(); +} + void BaristaTask::initiateBaristaConnection() { changeTaskState(TaskState::Initiating); @@ -79,10 +89,10 @@ void BaristaTask::shutdownBaristaConnection(bool shutdownBarista) if (shutdownBarista) { - if (_requestSocket && _taskState > TaskState::Initiating) + if (_requestSocket) { BaristaMessage shutdownMessage{BARISTA_COMMAND_SHUTDOWN}; - sendMessage(shutdownMessage, _requestSocket); + sendMessage(shutdownMessage, _requestSocket, true, false); } } @@ -156,7 +166,7 @@ bool BaristaTask::decodeMessage(const zmq::message_t& message, SettingsContainer return true; } -void BaristaTask::sendMessage(const SettingsContainer& settings, std::unique_ptr<zmq::socket_t>& socket, bool receiveAck) +void BaristaTask::sendMessage(const SettingsContainer& settings, std::unique_ptr<zmq::socket_t>& socket, bool receiveAck, bool blocking) { // Just encode the message and send it over the socket zmq::message_t message; @@ -164,7 +174,7 @@ void BaristaTask::sendMessage(const SettingsContainer& settings, std::unique_ptr if (encodeMessage(message, settings)) { try { - socket->send(message); + socket->send(message, blocking ? ZMQ_DONTWAIT : 0); } catch (std::exception& e) { // Ignore ZMQ errors here } diff --git a/Grinder/task/tasks/BaristaTask.h b/Grinder/task/tasks/BaristaTask.h index a640ec8..d8978a5 100644 --- a/Grinder/task/tasks/BaristaTask.h +++ b/Grinder/task/tasks/BaristaTask.h @@ -37,6 +37,10 @@ namespace grndr virtual void serialize(SerializationContext& ctx) const override; virtual void deserialize(DeserializationContext& ctx) override; + protected: + virtual void execute() override; + virtual void stop() override; + protected: void initiateBaristaConnection(); void shutdownBaristaConnection(bool shutdownBarista = true); @@ -46,7 +50,7 @@ namespace grndr protected: bool encodeMessage(zmq::message_t& message, const SettingsContainer& settings); bool decodeMessage(const zmq::message_t& message, SettingsContainer& settings); - void sendMessage(const SettingsContainer& settings, std::unique_ptr<zmq::socket_t>& socket, bool receiveAck = true); + void sendMessage(const SettingsContainer& settings, std::unique_ptr<zmq::socket_t>& socket, bool receiveAck = true, bool blocking = true); bool checkMessageStatus(BaristaMessage& message) const; @@ -68,6 +72,7 @@ namespace grndr void handleSettingLibrary(const SettingsContainer& messageData); void sendSetLibraryMessage(); + void sendPauseMessage(bool setPause); protected: unsigned int _baristaPort{6980}; diff --git a/Grinder/task/tasks/BaristaTrainingTask.cpp b/Grinder/task/tasks/BaristaTrainingTask.cpp index 8bc5015..cd0f1ec 100644 --- a/Grinder/task/tasks/BaristaTrainingTask.cpp +++ b/Grinder/task/tasks/BaristaTrainingTask.cpp @@ -42,14 +42,9 @@ void BaristaTrainingTask::deserialize(DeserializationContext& ctx) _solverPath = ctx.settings()(Serialization_Value_SolverPath).toString(); } -void BaristaTrainingTask::execute() +void BaristaTrainingTask::pause(bool setPause) { - initiateBaristaConnection(); -} - -void BaristaTrainingTask::stop() -{ - shutdownBaristaConnection(); + sendPauseTrainingMessage(setPause); } void BaristaTrainingTask::baristaReady() @@ -147,3 +142,10 @@ void BaristaTrainingTask::sendStartTrainingMessage() sendMessage(message, _requestSocket); } + +void BaristaTrainingTask::sendPauseTrainingMessage(bool setPause) +{ + BaristaMessage message{setPause ? BARISTA_COMMAND_PAUSETRAINING : BARISTA_COMMAND_RESUMETRAINING}; + + sendMessage(message, _requestSocket); +} diff --git a/Grinder/task/tasks/BaristaTrainingTask.h b/Grinder/task/tasks/BaristaTrainingTask.h index 4b6cf8c..72ffe74 100644 --- a/Grinder/task/tasks/BaristaTrainingTask.h +++ b/Grinder/task/tasks/BaristaTrainingTask.h @@ -37,8 +37,7 @@ namespace grndr virtual void deserialize(DeserializationContext& ctx) override; protected: - virtual void execute() override; - virtual void stop() override; + virtual void pause(bool setPause) override; protected: virtual void baristaReady() override; @@ -51,6 +50,7 @@ namespace grndr void handleTraining(const SettingsContainer& messageData); void sendStartTrainingMessage(); + void sendPauseTrainingMessage(bool setPause); protected: enum WorkerTaskState diff --git a/Grinder/ui/task/TaskWidget.cpp b/Grinder/ui/task/TaskWidget.cpp index d61344d..c9fdc96 100644 --- a/Grinder/ui/task/TaskWidget.cpp +++ b/Grinder/ui/task/TaskWidget.cpp @@ -113,7 +113,8 @@ void TaskWidget::updateUi() ui->progressBar->setValue(task->getProgress() * 100.0f); ui->btnStart->setEnabled(!task->isRunning() || task->getCapabilities().testFlag(Task::Capability::CanBePaused)); - ui->btnStart->setIcon(QIcon{task->isRunning() ? FILE_ICON_PAUSE : FILE_ICON_START}); + ui->btnStart->setIcon(QIcon{task->isRunning() && !task->isPaused() ? FILE_ICON_PAUSE : FILE_ICON_START}); + ui->btnStart->setToolTip(task->isRunning() && !task->isPaused() ? "Pause task" : (task->isRunning() ? "Resume task" : "Start task")); ui->btnStop->setEnabled(task->isRunning()); ui->btnRefresh->setEnabled(task->isRunning() && task->getCapabilities().testFlag(Task::Capability::CanBeRefreshed)); -- GitLab