Hazelcast C++ Client
Hazelcast C++ Client Library
Loading...
Searching...
No Matches
membership_listener.h
1/*
2 * Copyright (c) 2008-2025, Hazelcast, Inc. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <string>
20#include <boost/uuid/uuid.hpp>
21
22#include "hazelcast/util/export.h"
23#include "hazelcast/util/type_traits.h"
24#include "hazelcast/util/noop.h"
25
26#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
27#pragma warning(push)
28#pragma warning(disable : 4251) // for dll export
29#endif
30
31namespace hazelcast {
32namespace client {
33
36
37namespace spi {
38namespace impl {
39class ClientClusterServiceImpl;
40}
41} // namespace spi
42
56class HAZELCAST_API membership_listener final
57{
58 friend class cluster;
59 friend class spi::impl::ClientClusterServiceImpl;
60
61public:
67 template<typename Handler,
68 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
70 {
71 joined_ = std::forward<Handler>(h);
72 return *this;
73 }
74
78 template<typename Handler,
79 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
81 {
82 on_joined(std::forward<Handler>(h));
83 return std::move(*this);
84 }
85
91 template<typename Handler,
92 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
94 {
95 left_ = std::forward<Handler>(h);
96 return *this;
97 }
98
102 template<typename Handler,
103 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
104 membership_listener&& on_left(Handler&& h) &&
105 {
106 on_left(std::forward<Handler>(h));
107 return std::move(*this);
108 }
109
115 template<typename Handler,
116 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
118 {
119 init_ = std::forward<Handler>(h);
120 return *this;
121 }
122
126 template<typename Handler,
127 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
128 membership_listener&& on_init(Handler&& h) &&
129 {
130 on_init(std::forward<Handler>(h));
131 return std::move(*this);
132 }
133
134private:
135 using handler_t = std::function<void(const membership_event&)>;
136 using init_handler_t = std::function<void(const initial_membership_event&)>;
137
138 handler_t left_{ util::noop<const membership_event&> },
139 joined_{ util::noop<const membership_event&> };
140 init_handler_t init_{};
141};
142} // namespace client
143} // namespace hazelcast
144
145#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
146#pragma warning(pop)
147#endif
A event that is sent when a MembershipListener is registered.
Membership event fired when a new member is added to the cluster and/or when a member leaves the clus...
membership_listener && on_joined(Handler &&h) &&
Set an handler function to be invoked when a new member joins the cluster.
membership_listener && on_init(Handler &&h) &&
Set an handler function to be invoked once when this listener is registered.
membership_listener & on_init(Handler &&h) &
Set an handler function to be invoked once when this listener is registered.
membership_listener & on_left(Handler &&h) &
Set an handler function to be invoked when an existing member leaves the cluster.
membership_listener && on_left(Handler &&h) &&
Set an handler function to be invoked when an existing member leaves the cluster.
membership_listener & on_joined(Handler &&h) &
Set an handler function to be invoked when a new member joins the cluster.