Skip to content

Commit 24c6cd8

Browse files
authored
feat: Support flag change notifications. (#41)
1 parent 33e92df commit 24c6cd8

File tree

6 files changed

+26
-1
lines changed

6 files changed

+26
-1
lines changed

apps/hello-cpp/main.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ int main() {
5858
LD_LOG(logger, LogLevel::kInfo) << "Got status: " << status;
5959
});
6060

61+
client.FlagNotifier().OnFlagChange(
62+
"my-boolean-flag", [&logger](auto event) {
63+
LD_LOG(logger, LogLevel::kInfo) << "Got flag change: " << *event;
64+
});
65+
6166
client.WaitForReadySync(std::chrono::seconds(30));
6267

6368
auto value = client.BoolVariationDetail("my-boolean-flag", false);

libs/client-sdk/include/launchdarkly/client_side/api.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "launchdarkly/client_side/event_processor.hpp"
1919
#include "launchdarkly/client_side/flag_manager/detail/flag_manager.hpp"
2020
#include "launchdarkly/client_side/flag_manager/detail/flag_updater.hpp"
21+
#include "launchdarkly/client_side/flag_manager/detail/flag_notifier.hpp"
2122
#include "logger.hpp"
2223
#include "value.hpp"
2324

@@ -74,6 +75,8 @@ class Client {
7475

7576
data_sources::IDataSourceStatusProvider& DataSourceStatus();
7677

78+
flag_manager::detail::IFlagNotifier& FlagNotifier();
79+
7780
void WaitForReadySync(std::chrono::seconds timeout);
7881

7982
~Client();

libs/client-sdk/include/launchdarkly/client_side/flag_manager/detail/flag_change_event.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,6 @@ class FlagValueChangeEvent {
5959
std::string flag_name_;
6060
};
6161

62+
std::ostream& operator<<(std::ostream& out, FlagValueChangeEvent const& event);
63+
6264
} // namespace launchdarkly::client_side::flag_manager::detail

libs/client-sdk/include/launchdarkly/client_side/flag_manager/detail/flag_notifier.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#pragma once
22

3+
#include "launchdarkly/client_side/connection.hpp"
34
#include "launchdarkly/client_side/flag_manager/detail/flag_change_event.hpp"
45
#include "value.hpp"
5-
#include "launchdarkly/client_side/connection.hpp"
66

77
namespace launchdarkly::client_side::flag_manager::detail {
88

libs/client-sdk/src/api.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,10 @@ data_sources::IDataSourceStatusProvider& Client::DataSourceStatus() {
253253
return status_manager_;
254254
}
255255

256+
flag_manager::detail::IFlagNotifier& Client::FlagNotifier() {
257+
return flag_updater_;
258+
}
259+
256260
void Client::WaitForReadySync(std::chrono::seconds timeout) {
257261
std::unique_lock lock(init_mutex_);
258262
init_waiter_.wait_for(lock, timeout, [this] { return initialized_; });

libs/client-sdk/src/flag_manager/flag_change_event.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,15 @@ FlagValueChangeEvent::FlagValueChangeEvent(std::string name, Value old_value)
3131
old_value_(std::move(old_value)),
3232
deleted_(true) {}
3333

34+
std::ostream& operator<<(std::ostream& out, FlagValueChangeEvent const& event) {
35+
if (event.Deleted()) {
36+
out << "Event(name: " << event.FlagName() << " deleted)";
37+
} else {
38+
out << "Event(name: " << event.FlagName()
39+
<< ", old value: " << event.OldValue()
40+
<< ", new value: " << event.NewValue() << ")";
41+
}
42+
return out;
43+
}
44+
3445
} // namespace launchdarkly::client_side::flag_manager::detail

0 commit comments

Comments
 (0)