Hazelcast C++ Client
Hazelcast C++ Client Library
membership_listener.h
1 /*
2  * Copyright (c) 2008-2022, 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 
31 namespace hazelcast {
32 namespace client {
33 
34 class membership_event;
35 class initial_membership_event;
36 
37 namespace spi {
38 namespace impl {
39 class ClientClusterServiceImpl;
40 }
41 } // namespace spi
42 
56 class HAZELCAST_API membership_listener final
57 {
58  friend class cluster;
59  friend class spi::impl::ClientClusterServiceImpl;
60 
61 public:
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&&>>
80  membership_listener&& on_joined(Handler&& h) &&
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&&>>
93  membership_listener& on_left(Handler&& h) &
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&&>>
117  membership_listener& on_init(Handler&& h) &
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 
134 private:
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
Hazelcast cluster interface.
Definition: cluster.h:37
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_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.
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.