source: filezilla/trunk/fuentes/src/engine/engine_context.cpp @ 3185

Last change on this file since 3185 was 3185, checked in by jrpelegrina, 3 years ago

Update new version: 3.15.02

File size: 2.1 KB
Line 
1#include <filezilla.h>
2#include "engine_context.h"
3
4#include "directorycache.h"
5#include "logging_private.h"
6#include "pathcache.h"
7#include "ratelimiter.h"
8#include "socket.h"
9
10#include <libfilezilla/event_loop.hpp>
11
12namespace {
13struct logging_options_changed_event_type;
14typedef fz::simple_event<logging_options_changed_event_type> CLoggingOptionsChangedEvent;
15
16class CLoggingOptionsChanged final : public fz::event_handler, COptionChangeEventHandler
17{
18public:
19        CLoggingOptionsChanged(COptionsBase& options, fz::event_loop & loop)
20                : fz::event_handler(loop)
21                , options_(options)
22        {
23                RegisterOption(OPTION_LOGGING_DEBUGLEVEL);
24                RegisterOption(OPTION_LOGGING_RAWLISTING);
25                send_event<CLoggingOptionsChangedEvent>();
26        }
27
28        virtual void OnOptionsChanged(changed_options_t const& options)
29        {
30                if (options.test(OPTION_LOGGING_DEBUGLEVEL) || options.test(OPTION_LOGGING_RAWLISTING)) {
31                        CLogging::UpdateLogLevel(options_); // In main thread
32                        send_event<CLoggingOptionsChangedEvent>();
33                }
34        }
35
36        virtual void operator()(const fz::event_base&)
37        {
38                CLogging::UpdateLogLevel(options_); // In worker thread
39        }
40
41        COptionsBase& options_;
42};
43}
44
45class CFileZillaEngineContext::Impl final
46{
47public:
48        Impl(COptionsBase& options)
49                : limiter_(loop_, options)
50                , optionChangeHandler_(options, loop_)
51        {
52                CLogging::UpdateLogLevel(options);
53        }
54
55        ~Impl()
56        {
57                optionChangeHandler_.remove_handler();
58        }
59
60        fz::event_loop loop_;
61        CRateLimiter limiter_;
62        CDirectoryCache directory_cache_;
63        CPathCache path_cache_;
64        CLoggingOptionsChanged optionChangeHandler_;
65};
66
67CFileZillaEngineContext::CFileZillaEngineContext(COptionsBase & options)
68: options_(options)
69, impl_(new Impl(options))
70{
71}
72
73CFileZillaEngineContext::~CFileZillaEngineContext()
74{
75}
76
77COptionsBase& CFileZillaEngineContext::GetOptions()
78{
79        return options_;
80}
81
82fz::event_loop& CFileZillaEngineContext::GetEventLoop()
83{
84        return impl_->loop_;
85}
86
87CRateLimiter& CFileZillaEngineContext::GetRateLimiter()
88{
89        return impl_->limiter_;
90}
91
92CDirectoryCache& CFileZillaEngineContext::GetDirectoryCache()
93{
94        return impl_->directory_cache_;
95}
96
97CPathCache& CFileZillaEngineContext::GetPathCache()
98{
99        return impl_->path_cache_;
100}
Note: See TracBrowser for help on using the repository browser.