Skip to content
API Documentation
BastionGuard™
ScanWorker Class Reference

#include <scan_worker.hpp>

Public Types

using CompletionCallback = std::function<void(const ScanReport&)>
using ProgressCallback = std::function<void(const ScanProgress&)>

Public Member Functions

 ScanWorker ()
 ~ScanWorker ()
void start (const std::string &path, CompletionCallback cb, ProgressCallback progress_cb={})
bool running () const
void join ()
void request_cancel ()
bool cancel_requested () const

Private Attributes

std::atomic< bool > running_ {false}
std::atomic< bool > cancel_requested_ {false}
std::thread thread_

Detailed Description

Definition at line 9 of file scan_worker.hpp.

Member Typedef Documentation

◆ CompletionCallback

using ScanWorker::CompletionCallback = std::function<void(const ScanReport&)>

Definition at line 11 of file scan_worker.hpp.

◆ ProgressCallback

using ScanWorker::ProgressCallback = std::function<void(const ScanProgress&)>

Definition at line 12 of file scan_worker.hpp.

Constructor & Destructor Documentation

◆ ScanWorker()

ScanWorker::ScanWorker ( )
default

References ScanWorker(), and start().

Referenced by ScanWorker().

◆ ~ScanWorker()

ScanWorker::~ScanWorker ( )

Definition at line 8 of file scan_worker.cpp.

9{
11 join();
12}
void request_cancel()

References join(), and request_cancel().

Member Function Documentation

◆ cancel_requested()

bool ScanWorker::cancel_requested ( ) const

Definition at line 81 of file scan_worker.cpp.

82{
83 return cancel_requested_;
84}
std::atomic< bool > cancel_requested_

References cancel_requested_.

◆ join()

void ScanWorker::join ( )

Definition at line 70 of file scan_worker.cpp.

71{
72 if (thread_.joinable())
73 thread_.join();
74}
std::thread thread_

References thread_.

Referenced by ~ScanWorker().

◆ request_cancel()

void ScanWorker::request_cancel ( )

Definition at line 76 of file scan_worker.cpp.

77{
78 cancel_requested_ = true;
79}

References cancel_requested_.

Referenced by ~ScanWorker().

◆ running()

bool ScanWorker::running ( ) const

Definition at line 65 of file scan_worker.cpp.

66{
67 return running_;
68}
std::atomic< bool > running_

References running_.

Referenced by AppWindow::on_scan_clicked(), MainWindow::on_scan_now(), and MainWindow::update_action_controls().

◆ start()

void ScanWorker::start ( const std::string & path,
CompletionCallback cb,
ProgressCallback progress_cb = {} )

Definition at line 14 of file scan_worker.cpp.

17{
18 if (running_)
19 return;
20
21 cancel_requested_ = false;
22 running_ = true;
23
24 thread_ = std::thread([this, path, cb, progress_cb]()
25 {
26 ScanReport report;
27
28 try
29 {
30 ScannerEngine engine;
31
32 report = engine.run_scan(
33 path,
34 [this, progress_cb](const ScanProgress& p)
35 {
37 return;
38
39 if (progress_cb)
40 progress_cb(p);
41 },
42 [this]()
43 {
44 return cancel_requested_.load();
45 }
46 );
47 }
48 catch (const std::exception& e)
49 {
50 report.logs.push_back(
51 std::string("ScanWorker exception: ") + e.what());
52 }
53 catch (...)
54 {
55 report.logs.push_back("ScanWorker unknown exception");
56 }
57
58 running_ = false;
59
60 if (!cancel_requested_ && cb)
61 cb(report);
62 });
63}
ScanReport run_scan(const std::string &path, ProgressCallback progress_cb, std::function< bool()> cancel_cb)
std::vector< std::string > logs
Definition models.hpp:41

References cancel_requested_, ScanReport::logs, ScannerEngine::run_scan(), running_, and thread_.

Referenced by AppWindow::on_scan_clicked(), MainWindow::on_scan_now(), and ScanWorker().

Member Data Documentation

◆ cancel_requested_

std::atomic<bool> ScanWorker::cancel_requested_ {false}
private

Definition at line 30 of file scan_worker.hpp.

Referenced by cancel_requested(), request_cancel(), and start().

◆ running_

std::atomic<bool> ScanWorker::running_ {false}
private

Definition at line 29 of file scan_worker.hpp.

Referenced by running(), and start().

◆ thread_

std::thread ScanWorker::thread_
private

Definition at line 32 of file scan_worker.hpp.

Referenced by join(), and start().


The documentation for this class was generated from the following files: