rippled
Loading...
Searching...
No Matches
WorkFile.h
1#pragma once
2
3#include <xrpld/app/misc/detail/Work.h>
4
5#include <xrpl/basics/ByteUtilities.h>
6#include <xrpl/basics/FileUtilities.h>
7#include <xrpl/beast/utility/instrumentation.h>
8
9#include <boost/asio/bind_executor.hpp>
10#include <boost/asio/io_context.hpp>
11#include <boost/asio/strand.hpp>
12
13namespace xrpl {
14
15namespace detail {
16
17// Work with files
18class WorkFile : public Work, public std::enable_shared_from_this<WorkFile>
19{
20protected:
21 using error_code = boost::system::error_code;
22 // Override the definition in Work.h
24
25public:
26 using callback_type = std::function<void(error_code const&, response_type const&)>;
27
28public:
29 WorkFile(std::string const& path, boost::asio::io_context& ios, callback_type cb);
30 ~WorkFile();
31
32 void
33 run() override;
34
35 void
36 cancel() override;
37
38private:
41 boost::asio::io_context& ios_;
42 boost::asio::strand<boost::asio::io_context::executor_type> strand_;
43};
44
45//------------------------------------------------------------------------------
46
47WorkFile::WorkFile(std::string const& path, boost::asio::io_context& ios, callback_type cb)
48 : path_(path), cb_(std::move(cb)), ios_(ios), strand_(boost::asio::make_strand(ios))
49{
50}
51
53{
54 if (cb_)
55 cb_(make_error_code(boost::system::errc::interrupted), {});
56}
57
58void
60{
61 if (!strand_.running_in_this_thread())
62 return boost::asio::post(
63 ios_, boost::asio::bind_executor(strand_, std::bind(&WorkFile::run, shared_from_this())));
64
65 error_code ec;
66 auto const fileContents = getFileContents(ec, path_, megabytes(1));
67
68 XRPL_ASSERT(cb_, "xrpl::detail::WorkFile::run : callback is set");
69 cb_(ec, fileContents);
70 cb_ = nullptr;
71}
72
73void
75{
76 // Nothing to do. Either it finished in run, or it didn't start.
77}
78
79} // namespace detail
80
81} // namespace xrpl
T bind(T... args)
void cancel() override
Definition WorkFile.h:74
std::string path_
Definition WorkFile.h:39
boost::asio::strand< boost::asio::io_context::executor_type > strand_
Definition WorkFile.h:42
boost::system::error_code error_code
Definition WorkFile.h:21
WorkFile(std::string const &path, boost::asio::io_context &ios, callback_type cb)
Definition WorkFile.h:47
callback_type cb_
Definition WorkFile.h:40
boost::asio::io_context & ios_
Definition WorkFile.h:41
void run() override
Definition WorkFile.h:59
STL namespace.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
std::error_code make_error_code(xrpl::TokenCodecErrc e)
std::string getFileContents(boost::system::error_code &ec, boost::filesystem::path const &sourcePath, std::optional< std::size_t > maxSize=std::nullopt)
constexpr auto megabytes(T value) noexcept