From 610be4b2d082e7a1727ddaad23cb93d1cb2f0ef6 Mon Sep 17 00:00:00 2001
From: Ali Keles <83716339+akeles85@users.noreply.github.com>
Date: Mon, 3 Apr 2023 12:10:34 +0000
Subject: [PATCH] Readme update (#1189)
* initial commit
* Update README.md
* Update README.md
* review fixes
* Update README.md
* license updated
* Update README.md
* Update README.md
* review fixes
* fixes
---
README.md | 162 ++++++++++++++++++++++++++++++++--
sample_project/CMakeLists.txt | 12 +++
sample_project/client.cpp | 15 ++++
3 files changed, 180 insertions(+), 9 deletions(-)
create mode 100644 sample_project/CMakeLists.txt
create mode 100644 sample_project/client.cpp
diff --git a/README.md b/README.md
index 7e861a02c1..34ec999f85 100644
--- a/README.md
+++ b/README.md
@@ -1,22 +1,166 @@
-[![codecov](https://codecov.io/gh/hazelcast/hazelcast-cpp-client/branch/master/graph/badge.svg)](https://codecov.io/gh/hazelcast/hazelcast-cpp-client)
+
+
+
+
+
Hazelcast C++ Client
+
-# Async Hazelcast C++ Client
-Hazelcast is an open-source distributed in-memory data store and computation platform. It provides a wide variety of distributed data structures and concurrency primitives.
+
+
+
+
+
+
+
+
+
+
+
+
+
+---
+
+# What is Hazelcast?
+
+[Hazelcast](https://hazelcast.com/) is a distributed computation and storage platform for consistently low-latency querying,
+aggregation and stateful computation against event streams and traditional data sources. It allows you to quickly build
+resource-efficient, real-time applications. You can deploy it at any scale from small edge devices to a large cluster of
+cloud instances.
+
+A cluster of Hazelcast nodes share both the data storage and computational load which can dynamically scale up and down.
+When you add new nodes to the cluster, the data is automatically rebalanced across the cluster, and currently running
+computational tasks (known as jobs) snapshot their state and scale with processing guarantees.
+
+For more info, check out Hazelcast [repository](https://github.com/hazelcast/hazelcast).
+
+
+# Hazelcast C++ Client
hazelcast-cpp-client is the official C++ library API for using the Hazelcast in-memory database platform. It requires C++11 support.
-The library can be installed using package managers [Conan](https://github.com/hazelcast/hazelcast-cpp-client/blob/master/Reference_Manual.md#111-conan-users) and [Vcpkg](https://github.com/hazelcast/hazelcast-cpp-client/blob/master/Reference_Manual.md#112-vcpkg-users) or directly [from source code](https://github.com/hazelcast/hazelcast-cpp-client/blob/master/Reference_Manual.md#113-install-from-source-code-using-cmake) using [CMake](https://cmake.org/).
-* [Hazelcast Community Slack - C++ Client Channel](https://hazelcastcommunity.slack.com/channels/cpp-client)
-* Google Groups: https://groups.google.com/forum/#!forum/hazelcast
-* Stack Overflow: https://stackoverflow.com/questions/tagged/hazelcast
+## Installation
+### Hazelcast
+Hazelcast C++ client requires a working Hazelcast cluster to run. This cluster handles the storage and
+manipulation of the user data.
+
+A Hazelcast cluster consists of one or more cluster members. These members generally run on multiple virtual or
+physical machines and are connected to each other via the network. Any data put on the cluster is partitioned to
+multiple members transparent to the user. It is therefore very easy to scale the system by adding new members as
+the data grows. Hazelcast cluster also offers resilience. Should any hardware or software problem causes a crash
+to any member, the data on that member is recovered from backups and the cluster continues to operate without any
+downtime.
+
+The quickest way to start a single member cluster for development purposes is to use our
+[Docker images](https://hub.docker.com/r/hazelcast/hazelcast/).
+
+```bash
+docker run -p 5701:5701 hazelcast/hazelcast
+```
+
+This command fetches the latest Hazelcast version. You can find all available tags
+[here](https://hub.docker.com/r/hazelcast/hazelcast/tags).
+
+You can also use our ZIP or TAR [distributions](https://hazelcast.com/open-source-projects/downloads/)
+as described [here](Reference_Manual.md#12-starting-hazelcast-cluster).
+
+### Client
+
+#### Vcpkg Users
+Hazelcast C++ client package is available for [Vcpkg](https://github.com/microsoft/vcpkg) users. The package name is `hazelcast-cpp-client`.
+
+Please see [getting started](https://github.com/microsoft/vcpkg#getting-started) on how to use Vcpkg package manager with your application. In summary,
+
+If you use Linux or Mac:
+
+```sh
+git clone https://github.com/microsoft/vcpkg
+./vcpkg/bootstrap-vcpkg.sh
+./vcpkg/vcpkg install "hazelcast-cpp-client[openssl]" --recurse
+```
+
+If you use Windows:
+
+```bat
+git clone https://github.com/microsoft/vcpkg
+.\vcpkg\bootstrap-vcpkg.bat
+.\vcpkg\vcpkg install "hazelcast-cpp-client[openssl]:x64-windows" --recurse
+```
+The above code snippet will install `hazelcast-cpp-client` with its `boost` and `openssl` dependencies.
+
+After the installation, the library is available for usage. For example, if you are using CMake for your builds, you can use the following cmake build command with the `CMAKE_TOOLCHAIN_FILE` cmake option to be the `vcpkg.cmake`.
+```bat
+cmake -B [build directory] -S . -DCMAKE_TOOLCHAIN_FILE=[path to vcpkg]/scripts/buildsystems/vcpkg.cmake
+cmake --build [build directory]
+```
+
+##### Other Methods
+
+You can also install the hazelcast-cpp-client with [conan](https://conan.io/) and from source code. You can more information from [Reference Manual](https://github.com/akeles85/hazelcast-cpp-client/blob/readme_update/Reference_Manual.md#11-installing).
+
+## Overview
+
+### Usage
+
+There is an example project in [sample_project](https://github.com/akeles85/hazelcast-cpp-client/tree/readme_update/sample_project) directory. You can run the example as below:
+
+If you use Linux or Mac:
+
+```sh
+cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=[path to vcpkg]/scripts/buildsystems/vcpkg.cmake
+cmake --build build
+./build/client
+```
+
+If you use Windows:
+
+```bat
+cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=[path to vcpkg]\scripts\buildsystems\vcpkg.cmake && ^
+cmake --build build && ^
+.\build\Debug\client
+```
+
+The sample code creates a client, the client automatically connects to the cluster.
+It creates a map named `personnel_map` and puts the records inside it.
+It then gets all the entries from the cluster and prints them.
+```c++
+#include
+int main() {
+ auto hz = hazelcast::new_client().get(); // Connects to the cluster
+
+ auto personnel = hz.get_map("personnel_map").get();
+ personnel->put("Alice", "IT").get();
+ personnel->put("Bob", "IT").get();
+ personnel->put("Clark", "IT").get();
+ std::cout << "Added IT personnel. Logging all known personnel" << std::endl;
+ for (const auto &entry : personnel->entry_set().get()) {
+ std::cout << entry.first << " is in " << entry.second << " department." << std::endl;
+ }
+
+ return 0;
+}
+```
+
+## Features
+
+* Distributed, partitioned and queryable in-memory key-value store implementation, called [Map](examples/distributed-map/basic/FillMap.cpp)
+* Eventually consistent cache implementation to store a subset of the Map data locally in the memory of the client, called [Near Cache](examples/distributed-map/near-cache)
+* Additional data structures and simple messaging constructs such as [Set](examples/distributed-collections/set), [MultiMap](https://github.com/hazelcast/hazelcast-cpp-client/blob/master/examples/distributed-map/multimap/MultimapPut.cpp), [Queue](examples/distributed-collections/blockingqueue), [Topic](examples/distributed-topic)
+* Cluster-wide unique ID generator, called [FlakeIdGenerator](https://github.com/hazelcast/hazelcast-cpp-client/tree/master/examples/learning-basics/unique-names)
+* Distributed, CRDT based counter, called [PNCounter](examples/distributed-primitives/crdt-pncounter)
+* Distributed concurrency primitives from CP Subsystem such as [FencedLock](examples/cp/fenced_lock.cpp), [Semaphore](examples/cp/counting_semphore.cpp), [AtomicLong](examples/cp/atomic_long.cpp)
+* Integration with [Viridian](https://viridian.hazelcast.com/) (Hazelcast Cloud)
+* Support for serverless and traditional web service architectures with **Unisocket** and **Smart** operation modes
+* Ability to listen client lifecycle, cluster state and distributed data structure events
+* and [many more](https://hazelcast.com/clients/cplusplus/#client-features).
## Documentation
You can find the detailed documentation at the [documentation site](https://hazelcast.github.io/hazelcast-cpp-client/doc-index.html) and the [API reference](https://hazelcast.github.io/hazelcast-cpp-client/api-index.html).
-## License
+## Copyright
-hazelcast-cpp-client library is an open source project using the [Apache 2 License](https://github.com/hazelcast/hazelcast-cpp-client/blob/master/LICENSE).
+Copyright (c) 2008-2023, Hazelcast, Inc. All Rights Reserved.
+Visit [www.hazelcast.com](http://www.hazelcast.com) for more information.
diff --git a/sample_project/CMakeLists.txt b/sample_project/CMakeLists.txt
new file mode 100644
index 0000000000..6f62e8496c
--- /dev/null
+++ b/sample_project/CMakeLists.txt
@@ -0,0 +1,12 @@
+cmake_minimum_required(VERSION 3.10)
+
+project(HazelcastClientSample)
+
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+find_package(hazelcast-cpp-client CONFIG REQUIRED)
+
+
+add_executable(client client.cpp)
+target_link_libraries(client PRIVATE hazelcast-cpp-client::hazelcast-cpp-client)
\ No newline at end of file
diff --git a/sample_project/client.cpp b/sample_project/client.cpp
new file mode 100644
index 0000000000..b6c855fbd8
--- /dev/null
+++ b/sample_project/client.cpp
@@ -0,0 +1,15 @@
+#include
+int main() {
+ auto hz = hazelcast::new_client().get(); // Connects to the cluster
+
+ auto personel = hz.get_map("personel_map").get();
+ personel->put("Alice", "IT").get();
+ personel->put("Bob", "IT").get();
+ personel->put("Clark", "IT").get();
+ std::cout << "Added IT personel. Logging all known personel" << std::endl;
+ for (const auto &entry : personel->entry_set().get()) {
+ std::cout << entry.first << " is in " << entry.second << " department." << std::endl;
+ }
+
+ return 0;
+}
\ No newline at end of file