C++ Server-Side SDK
LaunchDarkly SDK
polling_initializer.hpp
1 #pragma once
2 
3 #include "../../data_interfaces/source/ifdv2_initializer.hpp"
4 
5 #include <launchdarkly/async/promise.hpp>
6 #include <launchdarkly/data_model/selector.hpp>
7 #include <launchdarkly/logging/logger.hpp>
8 #include <launchdarkly/network/requester.hpp>
9 #include <launchdarkly/server_side/config/built/all_built.hpp>
10 
11 #include <boost/asio/any_io_executor.hpp>
12 
13 #include <memory>
14 #include <optional>
15 #include <string>
16 
17 namespace launchdarkly::server_side::data_systems {
18 
31  public:
36  FDv2PollingInitializer(boost::asio::any_io_executor const& executor,
37  Logger const& logger,
38  std::string const& polling_base_url,
39  config::built::HttpProperties const& http_properties,
40  data_model::Selector selector,
41  std::optional<std::string> filter_key);
42 
43  ~FDv2PollingInitializer() override;
44 
45  async::Future<data_interfaces::FDv2SourceResult> Run() override;
46 
47  void Close() override;
48 
49  [[nodiscard]] std::string const& Identity() const override;
50 
51  private:
52  // State needed by async callbacks. Shared so callbacks can safely
53  // outlive 'this'.
54  struct State {
55  // Logger is itself thread-safe.
56  Logger logger;
57 
58  explicit State(Logger logger) : logger(std::move(logger)) {}
59  };
60 
62  static data_interfaces::FDv2SourceResult HandlePollResult(
63  std::shared_ptr<State> state,
64  network::HttpResult const& res);
65 
66  // Immutable state
67  network::HttpRequest const request_;
68  network::Requester const requester_;
69 
70  // Resolved when Close() is called (or this object is destroyed),
71  // cancelling any outstanding Run().
72  async::Promise<std::monostate> close_promise_;
73 
74  // Shared with async callbacks.
75  std::shared_ptr<State> state_;
76 };
77 
78 } // namespace launchdarkly::server_side::data_systems
Definition: http_properties.hpp:70
std::string const & Identity() const override
Definition: polling_initializer.cpp:69
FDv2PollingInitializer(boost::asio::any_io_executor const &executor, Logger const &logger, std::string const &polling_base_url, config::built::HttpProperties const &http_properties, data_model::Selector selector, std::optional< std::string > filter_key)
Definition: polling_initializer.cpp:13
async::Future< data_interfaces::FDv2SourceResult > Run() override
Definition: polling_initializer.cpp:32
void Close() override
Definition: polling_initializer.cpp:65