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