-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathStartAsync.cpp
65 lines (54 loc) · 2.2 KB
/
StartAsync.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*
* Copyright (c) 2008-2023, Hazelcast, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <chrono>
#include <future>
#include <hazelcast/client/hazelcast_client.h>
#include <hazelcast/client/lifecycle_listener.h>
#include <hazelcast/client/lifecycle_event.h>
int
main()
{
hazelcast::client::client_config config;
/**
* Set true for non blocking {@link hazelcast_client(const client_config
* &)}. The client creation won't wait to connect to cluster. The client
* instace will throw exception until it connects to cluster and become
* ready. If set to false, {@link hazelcast_client(const client_config &)}
* will block until a cluster connection established and it's ready to use
* client instance.
*
* default value is false
*/
config.get_connection_strategy_config().set_async_start(true);
// Add a lifecycle listener so that we can track when the client is
// connected
std::promise<void> connected;
config.add_listener(hazelcast::client::lifecycle_listener().on_connected(
[&connected]() { connected.set_value(); }));
auto hz = hazelcast::new_client(std::move(config)).get();
auto connection_future = connected.get_future();
if (connection_future.wait_for(std::chrono::seconds(0)) !=
std::future_status::ready) {
std::cout << "Async client is not connected yet." << std::endl;
}
// the client may not have connected to the cluster yet at this point since
// the cluster connection is async!!!
connection_future.wait();
std::cout << "Async client is connected now." << std::endl;
std::cout << "Finished" << std::endl;
hz.shutdown().get();
return 0;
}