diff options
Diffstat (limited to 'src/state/ready_state.hpp')
-rw-r--r-- | src/state/ready_state.hpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/state/ready_state.hpp b/src/state/ready_state.hpp new file mode 100644 index 0000000..5edfa06 --- /dev/null +++ b/src/state/ready_state.hpp @@ -0,0 +1,58 @@ +#pragma once + +#include "activating_state.hpp" +#include "basic_state.hpp" + +struct ReadyState : public BasicStateT<ReadyState> +{ + static std::string_view stateName() + { + return "ReadyState"; + } + + struct Error + { + std::errc code; + std::string message; + }; + + ReadyState(interfaces::MountPointStateMachine& machine) : + BasicStateT(machine){}; + + ReadyState(interfaces::MountPointStateMachine& machine, const std::errc& ec, + const std::string& message) : + BasicStateT(machine), + error{{ec, message}} + { + LogMsg(Logger::Error, machine.getName(), + " Errno = ", static_cast<int>(ec), " : ", message); + } + + std::unique_ptr<BasicState> onEnter() override + { + // Cleanup after previously mounted device + LogMsg(Logger::Debug, "exitCode: ", machine.getExitCode()); + machine.getTarget() = std::nullopt; + machine.getConfig().remainingInactivityTimeout = + std::chrono::seconds(0); + return nullptr; + } + + std::unique_ptr<BasicState> handleEvent(MountEvent event) + { + if (event.target) + { + machine.getTarget() = std::move(event.target); + } + return std::make_unique<ActivatingState>(machine); + } + + template <class AnyEvent> + std::unique_ptr<BasicState> handleEvent(AnyEvent event) + { + LogMsg(Logger::Error, "Invalid event: ", event.eventName); + return nullptr; + } + + std::optional<Error> error; +}; |