From dfd3c6a0c26d7d43eff04b42ceeef70ce048b18d Mon Sep 17 00:00:00 2001 From: Aregtech <49253642+aregtech@users.noreply.github.com> Date: Sun, 10 Nov 2024 12:43:49 +0100 Subject: [PATCH] 438 readme document of wiki (#440) * Update the readme document of wiki pages * Added a document to describe preprocessor definitions used in AREG SDK. * updated links and renamed the document files to simplify browsing. --- README.md | 34 +-- areg-sdk.sln | 33 ++- conf/README.md | 3 - conf/cmake/functions.cmake | 2 +- docs/ServiceInterface.md | 2 +- .../{areg-package.md => 01a-areg-package.md} | 0 .../{cmake-build.md => 01b-cmake-build.md} | 11 +- .../wiki/{msvc-build.md => 01c-msvc-build.md} | 2 +- docs/wiki/{wsl-build.md => 01d-wsl-build.md} | 10 +- .../{cmake-config.md => 02a-cmake-config.md} | 10 +- ...ke-functions.md => 02b-cmake-functions.md} | 4 +- ...ke-integrate.md => 02c-cmake-integrate.md} | 6 +- ...svc-integrate.md => 02d-msvc-integrate.md} | 8 +- docs/wiki/02e-preprocessor-definitions.md | 196 ++++++++++++++++++ ...ode-generator.md => 03a-code-generator.md} | 6 +- ...ogging-config.md => 04a-logging-config.md} | 27 ++- ...ging-develop.md => 04b-logging-develop.md} | 14 +- .../{logobserver.md => 04c-logobserver.md} | 16 +- .../{logcollector.md => 04d-logcollector.md} | 8 +- docs/wiki/{mcrouter.md => 05a-mcrouter.md} | 18 +- ...ce-syntax.md => 06a-persistence-syntax.md} | 0 docs/wiki/README.md | 50 ++++- docs/wiki/build.md | 1 - docs/wiki/vscode.md | 1 - examples/09_svcmulti/ReadMe.md | 2 +- examples/10_locsvc/ReadMe.md | 2 +- examples/12_pubsvc/ReadMe.md | 4 +- examples/13_pubmesh/ReadMe.md | 2 +- examples/14_pubtraffic/ReadMe.md | 6 +- examples/15_pubworker/ReadMe.md | 2 +- examples/16_pubfsm/ReadMe.md | 6 +- examples/19_pubwatchdog/ReadMe.md | 2 +- examples/21_pubunblock/ReadMe.md | 4 +- examples/22_pubsub/ReadMe.md | 4 +- examples/23_pubsubmix/ReadMe.md | 2 +- examples/24_pubsubmulti/ReadMe.md | 8 +- examples/README.md | 4 +- 37 files changed, 385 insertions(+), 125 deletions(-) rename docs/wiki/{areg-package.md => 01a-areg-package.md} (100%) rename docs/wiki/{cmake-build.md => 01b-cmake-build.md} (92%) rename docs/wiki/{msvc-build.md => 01c-msvc-build.md} (98%) rename docs/wiki/{wsl-build.md => 01d-wsl-build.md} (93%) rename docs/wiki/{cmake-config.md => 02a-cmake-config.md} (96%) rename docs/wiki/{cmake-functions.md => 02b-cmake-functions.md} (99%) rename docs/wiki/{cmake-integrate.md => 02c-cmake-integrate.md} (98%) rename docs/wiki/{msvc-integrate.md => 02d-msvc-integrate.md} (97%) create mode 100644 docs/wiki/02e-preprocessor-definitions.md rename docs/wiki/{code-generator.md => 03a-code-generator.md} (97%) rename docs/wiki/{logging-config.md => 04a-logging-config.md} (80%) rename docs/wiki/{logging-develop.md => 04b-logging-develop.md} (87%) rename docs/wiki/{logobserver.md => 04c-logobserver.md} (83%) rename docs/wiki/{logcollector.md => 04d-logcollector.md} (95%) rename docs/wiki/{mcrouter.md => 05a-mcrouter.md} (94%) rename docs/wiki/{persistence-syntax.md => 06a-persistence-syntax.md} (100%) delete mode 100644 docs/wiki/build.md delete mode 100644 docs/wiki/vscode.md diff --git a/README.md b/README.md index 4ff29287d..0125f13ef 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ ## Table of contents[![](https://raw.githubusercontent.com/aregtech/areg-sdk/master/docs/img/pin.svg)](#table-of-contents) - [Motivation](#motivation) - [Interface-centricity](#interface-centricity) -- [More than embedded](#more-than-embedded) +- [More than Embedded](#more-than-embedded) - [Composition of AREG SDK](#composition-of-areg-sdk) - [Getting Started: Clone and Build the AREG SDK](#getting-started-clone-and-build-the-areg-sdk) - [Cloning Sources](#cloning-sources) @@ -85,7 +85,7 @@ As data is generated and collected at the edge of the network (**mist network**) ## Interface-centricity[![](https://raw.githubusercontent.com/aregtech/areg-sdk/master/docs/img/pin.svg)](#interface-centricity) -At the core of AREG is **ORPC** (_Object Remote Procedure Call_), which targets interfaces on objects. This allows AREG to establish a **service mesh** or **service grid** where applications expose reusable services. Clients, without knowledge of the server’s network location, can request services seamlessly via method invocation. +At the core of AREG is **ORPC** (_Object Remote Procedure Call_), which targets interfaces on objects. This allows AREG to establish a **service mesh** or **service grid** where applications expose reusable services. Clients, without knowledge of the server's network location, can request services seamlessly via method invocation.
Diagram showing multiprocess communication
@@ -93,7 +93,7 @@ This **interface-driven Object RPC** model mirrors object-oriented programming p * **Service Providers** (*micro-server objects*) offer reusable, accessible services. * **Service Consumers** (*client objects*) invoke services without needing to know the network details. -AREG’s design integrates **Client-Server (Request-Reply)** and **Publish-Subscribe (PubSub)** models, enabling it to support both action- and data-centric communication. +AREG's design integrates **Client-Server (Request-Reply)** and **Publish-Subscribe (PubSub)** models, enabling it to support both action- and data-centric communication.
↑ Back to top ↑
@@ -160,7 +160,7 @@ The following build tools are supported: | **CMake** | `CMakeLists.txt` | Linux, Windows, Cygwin | POSIX, Win32 | Build with CMake, VSCode, or MSVS. | | **MSBuild** | `areg-sdk.sln` | Windows | Win32 | Build with MSBuild or MSVS. | -For detailed build instructions, check the **[Software Build](./docs/wiki/BUILD.md)** page. +For detailed build instructions, check the **[Building AREG SDK with CMake](./docs/wiki/01b-cmake-build.md)** or **[Building the AREG SDK with Microsoft Visual Studio and MSBuild](./docs/wiki/01c-msvc-build.md)** pages. > [!NOTE] @@ -175,7 +175,7 @@ cmake -B ./build cmake --build ./build -j 20 ``` -For custom builds, pass the options via the command line or configure the options listed in **[user.cmake](./docs/wiki/USER-CMAKE.md)** in CMake script. +For custom builds, pass the options via the command line or configure the options listed in **[user.cmake](./docs/wiki/02a-cmake-config.md)** in CMake script. #### Build with Microsoft Visual Studio @@ -185,12 +185,12 @@ Open `areg-sdk.sln` file in Microsoft Visual Studio and build the solution, or n MSBuild ./areg-sdk.sln ``` -For further details on customizing builds, visit the **[Build with MSBuild](./docs/wiki/MSVS-BUILD.md)** document. +For further details on customizing builds, visit the **[Building the AREG SDK with Microsoft Visual Studio and MSBuild](./docs/wiki/01c-msvc-build.md)** document. #### Additional Build Options -- **IDE Support:** Includes instructions for **[Microsoft Visual Studio](./docs/wiki/MSVS-BUILD.md)** and **[Visual Studio Code](./docs/wiki/VSCODE.md)**. -- **WSL Support:** Detailed steps for building under **[Windows Subsystem for Linux (WSL)](./docs/wiki/WSL.md)** are provided. +- **IDE Support:** Includes instructions for **[Microsoft Visual Studio](./docs/wiki/01c-msvc-build.md)** and **[Visual Studio Code](./docs/wiki/01b-cmake-build.md)**. +- **WSL Support:** Detailed steps for building under **[Windows Subsystem for Linux (WSL)](./docs/wiki/01d-wsl-build.md)** are provided. > [!NOTE] > This chapter focuses on building AREG and examples using **Microsoft Visual Studio** and **Visual Studio Code**. The other IDEs are currently not in the focus. @@ -228,7 +228,7 @@ endif() include("${AREG_SDK_ROOT}/areg.cmake") ``` -This either finds or fetches the AREG SDK components from `master` branch. See the **[CMake Integration Guide](./docs/wiki/cmake-integrate.md)** for more details. +This either finds or fetches the AREG SDK components from `master` branch. See the **[Building AREG SDK with CMake](./docs/wiki/02c-cmake-integrate.md)** page for more details. #### 2. Integrate as a project submodule @@ -236,7 +236,7 @@ This either finds or fetches the AREG SDK components from `master` branch. See t 2. Include the `*.vcxproj` files from `/framework` in your solution. 3. Link your project with the `areg` library and set project dependencies. -For full details, see the **[Visual Studio Integration Guide](./docs/wiki/MSVS-INTEGRATE.md)**. +For full details, see the **[Building the AREG SDK with Microsoft Visual Studio and MSBuild](./docs/wiki/01c-msvc-build.md)**. #### 3. Integrate the `areg` Package (vcpkg) @@ -267,7 +267,7 @@ Before starting, visit the **[official vcpkg](https://github.com/microsoft/vcpkg #pragma comment(lib, "areg") ``` -For details of installing and using `areg` package, see the appropriate **[integrate `areg` package](./docs/wiki/AREG-PACKAGE.md)** document. +For details of installing and using `areg` package, see the appropriate **[integrate `areg` package](./docs/wiki/01a-areg-package.md)** document. ### Service Creation and Development @@ -318,13 +318,13 @@ You can also set up multiprocess applications using same components and changing Both **mcrouter** and **logger** are essential components for communication and log collection. Configuration templates for the multicast router and log collector services are provided in the `areg.init` file. Both processes are designed to run as console applications or as **Operating System managed** services. -For in-depth details of building and using these applications, review the descriptions in **[Multicast Router Service](./docs/wiki/MCROUTER.md)** and **[Log Collector Service](./docs/wiki/LOGGER.md)** pages. *Discover how the AREG SDK’s Multicast Router and Log Collector streamline communication and logging in edge computing and real-time data transfer systems.* +For in-depth details of building and using these applications, review the descriptions in **[Multicast Router Service](./docs/wiki/05a-mcrouter.md)** and **[Log Collector Service](./docs/wiki/04d-logcollector.md)** pages. *Discover how the AREG SDK's Multicast Router and Log Collector streamline communication and logging in edge computing and real-time data transfer systems.*
↑ Back to top ↑
--- -This version is strong, but a few minor adjustments can improve flow, consistency, and readability. Here’s a refined version: +This version is strong, but a few minor adjustments can improve flow, consistency, and readability. Here's a refined version: --- @@ -333,11 +333,11 @@ This version is strong, but a few minor adjustments can improve flow, consistenc The AREG SDK offers hands-on examples demonstrating **Multithreading** and **Multiprocessing** applications, **Client-Server** and **Publish-Subscribe** models, **Object Remote Procedure Call (Object RPC)** and **Inter-Process Communication (IPC)**, featured **Finite-State Machines (FSM)** creation, and more. Each project highlights key features that facilitate efficient development of distributed services. **Some Featured Examples:** -1. **[00_helloservice](./examples/00_helloservice/)**: Master service creation across single-threaded, multi-threaded, and multi-process environments, showcasing AREG’s intuitive, interface-driven approach. +1. **[00_helloservice](./examples/00_helloservice/)**: Master service creation across single-threaded, multi-threaded, and multi-process environments, showcasing AREG's intuitive, interface-driven approach. 2. **[04_trace](./examples/04_trace/)**: Configure and manage logging to track application behavior, aiding debugging, performance analysis, and log management. -3. **[16_pubfsm](./examples/16_pubfsm/)**: Build and control a *Finite-State Machine (FSM)* with AREG’s *Timers* and *Events* for smooth state transitions. +3. **[16_pubfsm](./examples/16_pubfsm/)**: Build and control a *Finite-State Machine (FSM)* with AREG's *Timers* and *Events* for smooth state transitions. 4. **[19_pubwatchdog](./examples/19_pubwatchdog/)**: Implement a watchdog to monitor thread activity, restart unresponsive threads, and notify components as needed. @@ -398,13 +398,13 @@ For more information on commercial licensing, commercial support, trainings, or ## Call to action[![](https://raw.githubusercontent.com/aregtech/areg-sdk/master/docs/img/pin.svg)](#call-to-action) -We encourage the developer community to get involved and contribute to the growth of the AREG SDK. Join AREG SDK community and collaborate with AREG developers. Here’s how you can help: +We encourage the developer community to get involved and contribute to the growth of the AREG SDK. Join AREG SDK community and collaborate with AREG developers. Here's how you can help: - Check out our list of [open issues](https://github.com/aregtech/areg-sdk/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) where assistance is needed. - If you have suggestions or need new features, open a [new issue](https://github.com/aregtech/areg-sdk/issues) or start a [discussion](https://github.com/aregtech/areg-sdk/discussions). - For pull requests, ensure that the code adheres to our coding style and allow time for review and testing. -Lastly, help us grow the AREG SDK community by **giving a star** on GitHub! Whether you’re working on **embedded applications**, **multiprocessing and multithreading applications**, **real-time data transfer**, **IoT applications**, or **microservices architecture**, your support helps us continue to improve this cutting-edge communication framework. +Lastly, help us grow the AREG SDK community by **giving a star** on GitHub! Whether you're working on **embedded applications**, **multiprocessing and multithreading applications**, **real-time data transfer**, **IoT applications**, or **microservices architecture**, your support helps us continue to improve this cutting-edge communication framework.
↑ Back to top ↑
diff --git a/areg-sdk.sln b/areg-sdk.sln index 8adc866aa..e84b15d62 100644 --- a/areg-sdk.sln +++ b/areg-sdk.sln @@ -689,24 +689,23 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "example", "example", "{31AB EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wiki", "wiki", "{C33D0DF1-A5DB-4F6E-A526-6AA2B3C31AD3}" ProjectSection(SolutionItems) = preProject - docs\wiki\areg-package.md = docs\wiki\areg-package.md - docs\wiki\build.md = docs\wiki\build.md - docs\wiki\cmake-build.md = docs\wiki\cmake-build.md - docs\wiki\cmake-config.md = docs\wiki\cmake-config.md - docs\wiki\cmake-functions.md = docs\wiki\cmake-functions.md - docs\wiki\cmake-integrate.md = docs\wiki\cmake-integrate.md - docs\wiki\code-generator.md = docs\wiki\code-generator.md - docs\wiki\logcollector.md = docs\wiki\logcollector.md - docs\wiki\logging-config.md = docs\wiki\logging-config.md - docs\wiki\logging-develop.md = docs\wiki\logging-develop.md - docs\wiki\logobserver.md = docs\wiki\logobserver.md - docs\wiki\mcrouter.md = docs\wiki\mcrouter.md - docs\wiki\msvc-build.md = docs\wiki\msvc-build.md - docs\wiki\msvc-integrate.md = docs\wiki\msvc-integrate.md - docs\wiki\persistence-syntax.md = docs\wiki\persistence-syntax.md + docs\wiki\01a-areg-package.md = docs\wiki\01a-areg-package.md + docs\wiki\01b-cmake-build.md = docs\wiki\01b-cmake-build.md + docs\wiki\01c-msvc-build.md = docs\wiki\01c-msvc-build.md + docs\wiki\01d-wsl-build.md = docs\wiki\01d-wsl-build.md + docs\wiki\02a-cmake-config.md = docs\wiki\02a-cmake-config.md + docs\wiki\02b-cmake-functions.md = docs\wiki\02b-cmake-functions.md + docs\wiki\02c-cmake-integrate.md = docs\wiki\02c-cmake-integrate.md + docs\wiki\02d-msvc-integrate.md = docs\wiki\02d-msvc-integrate.md + docs\wiki\02e-preprocessor-definitions.md = docs\wiki\02e-preprocessor-definitions.md + docs\wiki\03a-code-generator.md = docs\wiki\03a-code-generator.md + docs\wiki\04a-logging-config.md = docs\wiki\04a-logging-config.md + docs\wiki\04b-logging-develop.md = docs\wiki\04b-logging-develop.md + docs\wiki\04c-logobserver.md = docs\wiki\04c-logobserver.md + docs\wiki\04d-logcollector.md = docs\wiki\04d-logcollector.md + docs\wiki\05a-mcrouter.md = docs\wiki\05a-mcrouter.md + docs\wiki\06a-persistence-syntax.md = docs\wiki\06a-persistence-syntax.md docs\wiki\README.md = docs\wiki\README.md - docs\wiki\vscode.md = docs\wiki\vscode.md - docs\wiki\wsl-build.md = docs\wiki\wsl-build.md EndProjectSection EndProject Global diff --git a/conf/README.md b/conf/README.md index 738ea57b2..c7b1fb4d7 100644 --- a/conf/README.md +++ b/conf/README.md @@ -4,8 +4,5 @@ This document is a short introduction of folder content and configuration for di ## CMakeLists The folder [./cmake](./cmkae/) contains project common and developer specific settings. Normally, it is expected to make custom changes only in the [user.cmake](./cmake/user.cmake) file. The content of the folder has impact when build project with `cmake` tool. -## Makefiles -The folder [./make](./make/) contains projects common and developer specific settings to change. Normally, it is expected to make custom changes only in the [./make/user.mk](./make/user.mk) file. The content of the folder has impact when build project with `make` tool. - ## Microsoft Visual Studio The folder [./msvc](./msvc/) contains Microsoft Visual Studio specific property files that are included in projects. Normally, it is expected to make custom changes only in the [./msvc/user.props](./msvc/user.props) file. The content of the foler has impact with build project with `MSBuild` build. diff --git a/conf/cmake/functions.cmake b/conf/cmake/functions.cmake index c67ad4635..316c38632 100644 --- a/conf/cmake/functions.cmake +++ b/conf/cmake/functions.cmake @@ -628,7 +628,7 @@ endmacro(macro_add_service_interface) # The generated files are placed within the ${AREG_GENERATE_DIR}, # with a subdirectory structure specified by ${generate_path}. # Parameters .: ${lib_name} -- The name of the static library to be created for the generated Service Interface code. -# ${source_root} -- The root directory containing the project’s source files. +# ${source_root} -- The root directory containing the project's source files. # ${siml_path} -- Path to the Service Interface document file (.siml), relative to the specified ${source_root}. # ${generate_path} -- Subdirectory path within ${AREG_GENERATE_DIR} where the generated files will be stored. # Usage ......: addServiceInterfaceEx( ) diff --git a/docs/ServiceInterface.md b/docs/ServiceInterface.md index 28d89d5ae..0c62ef7d6 100644 --- a/docs/ServiceInterface.md +++ b/docs/ServiceInterface.md @@ -249,7 +249,7 @@ To generate source code, execute `codegen.jar` with the following parameters: java -jar ~/projects/areg-sdk/codegen.jar --root=~/projects/my_project --target=src/generated/ --doc=interface/MyService.siml ``` -For more details see [AREG SDK Code Generator (`codegen.jar`)](./wiki/code-generator.md) document. +For more details see [AREG SDK Code Generator (`codegen.jar`)](./wiki/03a-code-generator.md) document. --- diff --git a/docs/wiki/areg-package.md b/docs/wiki/01a-areg-package.md similarity index 100% rename from docs/wiki/areg-package.md rename to docs/wiki/01a-areg-package.md diff --git a/docs/wiki/cmake-build.md b/docs/wiki/01b-cmake-build.md similarity index 92% rename from docs/wiki/cmake-build.md rename to docs/wiki/01b-cmake-build.md index e14fb0c53..b3fbecc12 100644 --- a/docs/wiki/cmake-build.md +++ b/docs/wiki/01b-cmake-build.md @@ -9,10 +9,15 @@ This guide provides step-by-step instructions for building the **AREG SDK** on L - [Platform-Specific Requirements](#platform-specific-requirements) - [Configuration and Build Steps](#configuration-and-build-steps) - [Step 1: Installing Dependencies](#step-1-installing-dependencies) + - [Linux](#linux) + - [Windows](#windows) + - [Cygwin](#cygwin) - [Step 2: Cloning the AREG SDK Repository](#step-2-cloning-the-areg-sdk-repository) - [Step 3: Configuring the Build](#step-3-configuring-the-build) - [Step 4: Building the Project](#step-4-building-the-project) - [Step 5: Running Tests and Installing](#step-5-running-tests-and-installing) + - [Run Unit Tests:](#run-unit-tests) + - [Install AREG SDK:](#install-areg-sdk) - [Additional IDE Configurations](#additional-ide-configurations) --- @@ -31,7 +36,7 @@ Ensure your system includes the following: - **Windows**: Requires Microsoft Visual C++, including packages **CMake** and **CLang compiler for Windows**, and **MFC** for GUI examples. - **Optional Libraries**: - **Google Test (GTest)** for unit tests (or build from sources). - - **SQLite3** (optional, or use the version in AREG SDK’s `thirdparty` directory). + - **SQLite3** (optional, or use the version in AREG SDK's `thirdparty` directory). If your system does not meet these requirements, proceed to [Step 1: Installing Dependencies](#step-1-installing-dependencies); otherwise, start from [Step 2: Cloning the AREG SDK Repository](#step-2-cloning-the-areg-sdk-repository). @@ -88,7 +93,7 @@ To customize the build, modify options as needed: ```bash cmake -B ./build -DAREG_BUILD_TYPE=Debug -DAREG_EXAMPLES=ON -DAREG_TESTS=ON ``` -For additional configurations, refer to the [CMake Configuration Guide](./cmake-config.md). +For additional configurations, refer to the [CMake Configuration Guide](./02a-cmake-config.md). --- @@ -134,7 +139,7 @@ Install AREG SDK binaries and headers to develop multithreaded and multiprocessi For **Microsoft Visual Studio** or **Visual Studio Code**: 1. Open the `` directory in your IDE. 2. Right-click `CMakeLists.txt` and select *Configure*. -3. Adjust [AREG SDK settings](./cmake-config.md) in the CMake cache if necessary, then build the project directly in the IDE. +3. Adjust [AREG SDK settings](./02a-cmake-config.md) in the CMake cache if necessary, then build the project directly in the IDE. **Further Resources**: For additional setup information, refer to [Visual Studio CMake Projects](https://learn.microsoft.com/en-us/cpp/build/cmake-projects-in-visual-studio) or [VS Code CMake Quickstart](https://code.visualstudio.com/docs/cpp/cmake-quickstart). diff --git a/docs/wiki/msvc-build.md b/docs/wiki/01c-msvc-build.md similarity index 98% rename from docs/wiki/msvc-build.md rename to docs/wiki/01c-msvc-build.md index 2467e0062..33d554c50 100644 --- a/docs/wiki/msvc-build.md +++ b/docs/wiki/01c-msvc-build.md @@ -93,5 +93,5 @@ For additional examples, see the [MSBuild Workflow](./../../.github/workflow/msb ### Additional Resources - For additional setup information, refer to [Visual Studio CMake Projects](https://learn.microsoft.com/en-us/cpp/build/cmake-projects-in-visual-studio) or [VS Code CMake Quickstart](https://code.visualstudio.com/docs/cpp/cmake-quickstart). -- Additionally, read [Integrating AREG Framework with Microsoft Visual Studio](./msvc-integrate.md) document. +- Additionally, read [Integrating AREG Framework with Microsoft Visual Studio](./02d-msvc-integrate.md) document. - For more information on building the AREG SDK, troubleshooting tips, or advanced setup options, see the **AREG SDK documentation** on [GitHub](https://github.com/aregtech/areg-sdk). diff --git a/docs/wiki/wsl-build.md b/docs/wiki/01d-wsl-build.md similarity index 93% rename from docs/wiki/wsl-build.md rename to docs/wiki/01d-wsl-build.md index a5abc8ce4..cfdcded4e 100644 --- a/docs/wiki/wsl-build.md +++ b/docs/wiki/01d-wsl-build.md @@ -2,7 +2,7 @@ Following these steps will guide you through setting up, troubleshooting, and running AREG SDK on WSL effectively. -## Contents +## Table of Contents 1. [General Information](#general-information) 2. [Installing a Linux Distribution in WSL](#installing-linux-distribution-in-wsl) 3. [Troubleshooting WSL Updates](#troubleshooting-wsl-updates) @@ -23,7 +23,7 @@ The following sections provide setup, installation, and troubleshooting steps to ## 1. Installing a Linux Distribution in WSL -Follow [Microsoft’s WSL installation guide](https://learn.microsoft.com/en-us/windows/wsl/install-manual) for complete steps. To install Ubuntu, use: +Follow [Microsoft's WSL installation guide](https://learn.microsoft.com/en-us/windows/wsl/install-manual) for complete steps. To install Ubuntu, use: ```bash wsl --install -d ubuntu ``` @@ -69,8 +69,8 @@ Install the essential tools and libraries to compile AREG SDK: sudo apt-get install -y git cmake build-essential clang libncurses-dev openjdk-17-jre ``` -For package specifics, consult your Linux distribution’s package list, such as [Ubuntu Packages](https://packages.ubuntu.com/).
-Refer to the **System Requirements** for Linux platforms in the [Building AREG SDK with CMake](./cmake-build.md) document. +For package specifics, consult your Linux distribution's package list, such as [Ubuntu Packages](https://packages.ubuntu.com/).
+Refer to the **System Requirements** for Linux platforms in the [Building AREG SDK with CMake](./01b-cmake-build.md) document. --- @@ -114,7 +114,7 @@ Example commands to build AREG SDK with CMake: cmake --build ./build -j ``` -Refer to the **[AREG SDK build](./cmake-build.md)** document for further details. +Refer to the **[AREG SDK build](./01b-cmake-build.md)** document for further details. --- diff --git a/docs/wiki/cmake-config.md b/docs/wiki/02a-cmake-config.md similarity index 96% rename from docs/wiki/cmake-config.md rename to docs/wiki/02a-cmake-config.md index 00c3c93c0..182632cb3 100644 --- a/docs/wiki/cmake-config.md +++ b/docs/wiki/02a-cmake-config.md @@ -1,5 +1,7 @@ # CMake Configuration Options for Building AREG SDK +*This document describes the variables listed in `user.cmake` file.* + ## CMake Configuration Overview The AREG SDK offers flexible build configurations via CMake, allowing users to customize compilation settings, output directories, library types, and additional features for tailored development environments. These options can be adjusted to optimize the AREG SDK binaries for different systems, such as Linux and Windows, and to control features like testing, logging, and package usage. @@ -105,7 +107,7 @@ The following are the available CMake options to configure the AREG SDK build. O --- ### 2. **AREG_COMPILER** -- **Description**: Defines the compiler for both C++ and C projects, using either the full path or a shorthand name (make sure the compiler’s directory is in your PATH environment variable). Alternatively, you can set the `CMAKE_CXX_COMPILER` variable directly, achieving the same effect. This option can be skipped if `CMAKE_CXX_COMPILER` is already specified. +- **Description**: Defines the compiler for both C++ and C projects, using either the full path or a shorthand name (make sure the compiler's directory is in your PATH environment variable). Alternatively, you can set the `CMAKE_CXX_COMPILER` variable directly, achieving the same effect. This option can be skipped if `CMAKE_CXX_COMPILER` is already specified. - **Possible Values**: `g++`, `gcc`, `clang++`, `clang`, `c++`, `cc`, `cl`, `clang-cl`. - **Defaults**: System default compiler. - **Example**: `cmake -B ./build -DAREG_COMPILER=g++` @@ -205,7 +207,7 @@ The following are the available CMake options to configure the AREG SDK build. O --- ### 12. **AREG_GTEST_PACKAGE** - - **Description**: Determines whether the system-installed Google Test package is used or fetched and compiled directly from the Google repository. If enabled (`ON`), it will attempt to use the system package; otherwise, it fetches from the repository if the package isn’t found. + - **Description**: Determines whether the system-installed Google Test package is used or fetched and compiled directly from the Google repository. If enabled (`ON`), it will attempt to use the system package; otherwise, it fetches from the repository if the package isn't found. - **Possible Values**: `ON`, `OFF` - **Default**: `ON` - **Example**: `cmake -B ./build -DAREG_GTEST_PACKAGE=OFF` @@ -215,7 +217,7 @@ The following are the available CMake options to configure the AREG SDK build. O --- ### 23. **AREG_ENABLE_OUTPUTS** - - **Description**: Controls whether output directories use the CMake binary directory or AREG SDK-specific defaults. When disabled (`OFF`), AREG-specific settings are ignored in favor of CMake’s default outputs, useful when integrating AREG into third-party builds. + - **Description**: Controls whether output directories use the CMake binary directory or AREG SDK-specific defaults. When disabled (`OFF`), AREG-specific settings are ignored in favor of CMake's default outputs, useful when integrating AREG into third-party builds. - **Possible Values**: `ON`, `OFF` - **Default**: `ON` - **Example**: `cmake -B ./build -DAREG_ENABLE_OUTPUTS=OFF` @@ -302,7 +304,7 @@ sudo cmake --install ./product/cache/llvm ### Quick Notes -- **Root Directory**: To integrate AREG SDK sources in other projects, set `AREG_SDK_ROOT` to the AREG SDK’s root directory before including `user.cmake` or `setup.cmake`. In the AREG SDK project, `AREG_SDK_ROOT` defaults to `CMAKE_CURRENT_LIST_DIR` in `/CMakeLists.txt` (i.e., `AREG_SDK_ROOT` is ``). +- **Root Directory**: To integrate AREG SDK sources in other projects, set `AREG_SDK_ROOT` to the AREG SDK's root directory before including `user.cmake` or `setup.cmake`. In the AREG SDK project, `AREG_SDK_ROOT` defaults to `CMAKE_CURRENT_LIST_DIR` in `/CMakeLists.txt` (i.e., `AREG_SDK_ROOT` is ``). - **Integrating as a Package**: When using AREG SDK as a package (e.g., via `vcpkg`), set `AREG_SDK_ROOT` to the package's `share` directory and `AREG_FRAMEWORK` to the `include` directory for headers. diff --git a/docs/wiki/cmake-functions.md b/docs/wiki/02b-cmake-functions.md similarity index 99% rename from docs/wiki/cmake-functions.md rename to docs/wiki/02b-cmake-functions.md index 438557a8e..9e984f205 100644 --- a/docs/wiki/cmake-functions.md +++ b/docs/wiki/02b-cmake-functions.md @@ -42,7 +42,7 @@ The [functions.cmake](./../../conf/cmake/functions.cmake) file in AREG SDK conta The [functions.cmake](./../../conf/cmake/functions.cmake) file includes reusable CMake utilities that simplify repetitive tasks, making project setup cleaner and more maintainable. > [!NOTE] -> Include [areg.cmake](./../../conf/cmake/areg.cmake) (not functions.cmake) in `CMakeLists.txt` files to ensure proper AREG Framework integration after setting `AREG_SDK_ROOT` to the `` installation directory. More details can be found in the [AREG Framework Integration](./cmake-integrate.md) document in the AREG SDK Wiki. +> Include [areg.cmake](./../../conf/cmake/areg.cmake) (not functions.cmake) in `CMakeLists.txt` files to ensure proper AREG Framework integration after setting `AREG_SDK_ROOT` to the `` installation directory. More details can be found in the [AREG Framework Integration](./02c-cmake-integrate.md) document in the AREG SDK Wiki. --- @@ -312,7 +312,7 @@ The [functions.cmake](./../../conf/cmake/functions.cmake) file includes reusable - **Purpose**: A wrapper for `macro_add_service_interface`, facilitating the generation of code and header files for a Service Interface document (`.siml` file) within a specified static library. This function assumes the code generator tool is located at `${AREG_SDK_TOOLS}/codegen.jar`. The generated files are placed within the `${AREG_GENERATE_DIR}`, with a subdirectory structure specified by `${generate_path}`. - **Parameters**: - `lib_name` [in]: The name of the static library to be created for the generated Service Interface code. - - `source_root` [in]: The root directory containing the project’s source files. + - `source_root` [in]: The root directory containing the project's source files. - `siml_path` [in]: Path to the Service Interface document file (.siml), relative to the specified `${source_root}`. - `generate_path` [in]: Subdirectory path within `${AREG_GENERATE_DIR}` where the generated files will be stored. - **Usage**: `addServiceInterfaceEx( )` diff --git a/docs/wiki/cmake-integrate.md b/docs/wiki/02c-cmake-integrate.md similarity index 98% rename from docs/wiki/cmake-integrate.md rename to docs/wiki/02c-cmake-integrate.md index 9dbe8de69..bf16a4923 100644 --- a/docs/wiki/cmake-integrate.md +++ b/docs/wiki/02c-cmake-integrate.md @@ -190,7 +190,7 @@ target_link_libraries(example PRIVATE areg::areg) ./build/example ``` -Also see [Installing and Using AREG SDK with vcpkg Package Manager](./areg-package.md) for more details. +Also see [Installing and Using AREG SDK with vcpkg Package Manager](./01a-areg-package.md) for more details. ### Method 3: Integrate as Git Submodule @@ -237,7 +237,7 @@ Also see [Installing and Using AREG SDK with vcpkg Package Manager](./areg-packa ### Advanced CMake Options -The AREG SDK offers flexible configurations via CMake, allowing customization of compilation settings, output directories, and additional features. For the full list, refer to the [CMake Configuration Options for Building AREG SDK](./cmake-config.md) document. +The AREG SDK offers flexible configurations via CMake, allowing customization of compilation settings, output directories, and additional features. For the full list, refer to the [CMake Configuration Options for Building AREG SDK](./02a-cmake-config.md) document. > [!IMPORTANT] > Set options before including the `/areg.cmake` file. @@ -265,7 +265,7 @@ addServiceInterface(coolservice "service/CoolService.siml") macro_declare_executable(cool coolservice main.cpp) ``` -See [AREG SDK CMake Functions and Macros](./cmake-functions.md) for details. +See [AREG SDK CMake Functions and Macros](./02b-cmake-functions.md) for details. --- diff --git a/docs/wiki/msvc-integrate.md b/docs/wiki/02d-msvc-integrate.md similarity index 97% rename from docs/wiki/msvc-integrate.md rename to docs/wiki/02d-msvc-integrate.md index 294ad0b66..168089edd 100644 --- a/docs/wiki/msvc-integrate.md +++ b/docs/wiki/02d-msvc-integrate.md @@ -9,7 +9,7 @@ This guide provides instructions for integrating the **AREG Framework** into an > For a practical example of integrating AREG SDK libraries and tools, refer to the **[AREG SDK Demo](https://github.com/aregtech/areg-sdk-demo)** repository. > [!NOTE] -> Alternatively, you can learn how to [integrate AREG Framework in a project with CMake](./cmake-integrate.md). +> Alternatively, you can learn how to [integrate AREG Framework in a project with CMake](./02c-cmake-integrate.md). ## Table of Contents @@ -95,7 +95,7 @@ This example project and source file will be used throughout the integration ste 4. **Build the `example` Project**: Since the example code includes a direct link to the `areg` library (`#pragma comment(lib, "areg")`), no additional configuration is needed. Build the `example` project and run it. -Also see [Installing and Using AREG SDK with vcpkg Package Manager](./areg-package.md) for more details. +Also see [Installing and Using AREG SDK with vcpkg Package Manager](./01a-areg-package.md) for more details. ### Method 2: Integrate as Git Submodule @@ -120,7 +120,7 @@ Also see [Installing and Using AREG SDK with vcpkg Package Manager](./areg-packa ```xml $(SolutionDir)areg-sdk/ ``` - Adjust other settings, such as `AregOutputXXX`, in `msvc_setup.props` if needed to fit your project’s build structure. + Adjust other settings, such as `AregOutputXXX`, in `msvc_setup.props` if needed to fit your project's build structure. - Add the `areg.vcxproj` project and optionally other `*.vcxproj` files located in `/framework` to your `example` solution. - In **Project** -> **Properties** for the `example` project, navigate to **C/C++** -> **General** -> **Additional Include Directories**, and add `$(AregFramework)`. @@ -150,7 +150,7 @@ msbuild /m /property:Configuration=Release /property:Platform=Win32 /property:Ar ### Advanced Project Settings -If you want to adopt the AREG SDK’s directory structure for your projects, use the `msvc-XXX.vcxproj` template files in `\docs\templates`. These templates include all necessary properties and compiler settings. Copy the required files, rename them, edit the GUIDs, and add them to your solution. +If you want to adopt the AREG SDK's directory structure for your projects, use the `msvc-XXX.vcxproj` template files in `\docs\templates`. These templates include all necessary properties and compiler settings. Copy the required files, rename them, edit the GUIDs, and add them to your solution. Since Microsoft Visual Studio does not offer the same flexibility as CMake for dynamic builds, additional steps are needed if using the code generator: diff --git a/docs/wiki/02e-preprocessor-definitions.md b/docs/wiki/02e-preprocessor-definitions.md new file mode 100644 index 000000000..c7bd2b472 --- /dev/null +++ b/docs/wiki/02e-preprocessor-definitions.md @@ -0,0 +1,196 @@ +# AREG SDK Preprocessor Definitions Guide: Configuration and Usage Across Toolchains + +*This document provides an overview of preprocessor definitions used in AREG SDK projects, detailing each definition's purpose and usage to aid in configuring and compiling applications effectively.* + +## Table of Contents +1. [Introduction](#introduction) +2. [Platform-Specific Defines](#platform-specific-defines) + - [POSIX](#posix) + - [WINDOWS](#windows) +3. [Build Type Defines](#build-type-defines) + - [DEBUG and NDEBUG](#debug-and-ndebug) +4. [AREG Framework Library Defines](#areg-framework-library-defines) + - [Exporting Framework Library](#exporting-framework-library) + - [Importing Framework Library](#importing-framework-library) +5. [AREG Log Observer API Library Defines](#areg-log-observer-api-library-defines) + - [Exporting areglogger Library](#exporting-areglogger-library) + - [Importing areglogger Library](#importing-areglogger-library) +6. [Other Definitions](#other-definitions) + - [AREG_EXTENDED](#areg_extended) + - [AREG_LOGS](#areg_logs) + - [Application Bitness](#application-bitness) + +--- + +## Introduction + +The AREG SDK uses preprocessor-defined symbols to configure framework compilation, enabling customization and control over the build process. This guide provides details on each define and instructions for configuring them across various platforms and IDEs. + +| Define | Description | +|-----------------------|-------------------------------------------------------| +| **POSIX** | Enables compilation with POSIX API. | +| **WINDOWS** | Enables compilation with Windows API. | +| **DEBUG** | Enables Debug build. | +| **NDEBUG** | Enables Release build. | +| **EXP_AREG_DLL** | Exports symbols for shared `areg` library. | +| **EXP_AREG_LIB** | Exports symbols for static `areg` library. | +| **IMP_AREG_DLL** | Imports symbols from shared `areg` library. | +| **IMP_AREG_LIB** | Imports symbols from static `areg` library. | +| **AREG_EXTENDED** | Enables extended AREG features. | +| **AREG_LOGS** | Enables logging in AREG framework. | +| **EXP_LOGGER_DLL** | Exports symbols for shared `areglogger` library. | +| **EXP_LOGGER_LIB** | Exports symbols for shared `areglogger` library. | +| **IMP_LOGGER_DLL** | Imports symbols for shared `areglogger` library. | +| **IMP_LOGGER_LIB** | Imports symbols for shared `areglogger` library. | +| **BIT32** | Enables compilation for 32-bit systems. | +| **BIT64** | Enables compilation for 64-bit systems. | + +### Configuration Methods + +These symbols can be set in: +- `msvc_setup.props` property file for builds with Microsoft Visual Studio, +- `CMakeLists.txt` of your project when using AREG SDK libraries, +- or the command line when building with CMake. + +--- + +## Platform-Specific Defines + +### POSIX + +The `POSIX` define enables the AREG framework to compile with POSIX APIs. It is automatically set when compiling with compatible compilers (e.g., GCC, Clang) under Linux or Cygwin. + +**CMake Example**: +```bash +cmake -B ./build -DAREG_COMPILER_FAMILY=gnu +``` + +### WINDOWS +The `WINDOWS` define enables compilation with the Windows API and is automatically set when using MSVC or Clang for Visual Studio (`clang-cl`). + +**CMake Example**: +```bash +cmake -B ./build -DAREG_COMPILER_FAMILY=msvc +``` + +> [!NOTE] +> `POSIX` and `WINDOWS` are mutually exclusive. + +--- + +## Build Type Defines + +### DEBUG and NDEBUG +These defines specify the build configuration (`DEBUG` for Debug, `NDEBUG` for Release) and are mutually exclusive. + +**CMake Example**: Set the build type using the `AREG_BUILD_TYPE` parameter, which is equivalent to `CMAKE_BUILD_TYPE`: +```bash +cmake -B ./build -DAREG_BUILD_TYPE=Debug +``` + +**Microsoft Visual Studio**: Select the build configuration in the Visual Studio Configuration Manager. + +> [!NOTE] +> `DEBUG` and `NDEBUG` are mutually exclusive. + +--- + +## AREG Framework Library Defines + +### Exporting Framework Library +These symbols ensure proper export of classes and functions for `areg` shared or static libraries. Relevant only when building the `areg` library. + +- **EXP_AREG_DLL**: Exports symbols for a shared `areg` library. +- **EXP_AREG_LIB**: Exports symbols for a static `areg` library. + +**CMake Example**: Configure the library as shared +```bash +cmake -B ./build -DAREG_BINARY=shared +``` + +**Microsoft Visual Studio**: By default, `areg` is compiled as a shared library (DLL) and sets `EXP_AREG_DLL`. To change, manually select the library type and set `EXP_AREG_LIB` in the `areg` project property page. + +> [!NOTE] +> `EXP_AREG_DLL` and `EXP_AREG_LIB` are mutually exclusive. + +### Importing Framework Library +For projects using the `areg` library, these symbols control import of shared or static library symbols. + +- **IMP_AREG_DLL**: Imports symbols from a shared `areg` library. +- **IMP_AREG_LIB**: Imports symbols from a static `areg` library. + +**CMake Example**: Automatically sets the correct define when specifying the `areg` library type and adding executables using AREG CMake functions or macros. Otherwise, the define should be set manually +```bash +cmake -B ./build -DAREG_BINARY=shared +``` + +> [!NOTE] +> `IMP_AREG_DLL` and `IMP_AREG_LIB` are mutually exclusive. + +--- + +## AREG Log Observer API Library Defines + +### Exporting areglogger Library +These symbols ensure proper export of classes and functions for shared or static `areglogger` libraries. Relevant only when building the `areglogger` library. + +- **EXP_LOGGER_DLL**: Exports symbols for the `areglogger` library when building as a dynamic library (DLL). +- **EXP_LOGGER_LIB**: Exports symbols for the `areglogger` library when building as a static library. + +**CMake Example**: Configure the library as static +```bash +cmake -B ./build -DAREG_LOGGER_LIB=static +``` + +**Microsoft Visual Studio**: By default, `areglogger` is compiled as a shared library (DLL) and sets `EXP_LOGGER_DLL`. To change, manually select the library type and set `EXP_LOGGER_LIB` in the `areglogger` project property page. + +> [!NOTE] +> `EXP_LOGGER_DLL` and `EXP_LOGGER_LIB` are mutually exclusive. + +### Importing areglogger Library +For projects using the `areglogger` library, these symbols control import of shared or static library symbols. + +- **IMP_LOGGER_DLL**: Imports symbols from a shared `areglogger` library. +- **IMP_LOGGER_LIB**: Imports symbols from a static `areglogger` library. + +**CMake Example**: Manually define in the command line or in the CMake scripts the type of library to link the project +```bash +cmake -B ./build -DIMP_LOGGER_LIB +``` + +**Microsoft Visual Studio**: Select your project property and manually set one of the defines. + +> [!NOTE] +> `IMP_LOGGER_DLL` and `IMP_LOGGER_LIB` are mutually exclusive. + +--- + +## Other Definitions + +### AREG_EXTENDED +The `AREG_EXTENDED` define enables additional features in the `aregextend` library. Set it in configuration files as needed. It may have additional dependencies. For example, it requires `ncurses` library dependency when compile with additional features using POSIX API. + +**CMake Example**: Change the boolean value of the `AREG_EXTENDED` variable either before including AREG SDK CMake scripts or in the command line: +``` +cmake -B ./build -DAREG_EXTENDED:BOOL=ON +``` + +**Microsoft Visual Studio**: Change the property value `AregExtended` in the property file `msvc_setup.props` + +### AREG_LOGS +The `AREG_LOGS` define enables compilation sources with logging. Set it in configuration files as needed. + +**CMake Example**: Change the boolean value of the `AREG_LOGS` variable either before including AREG SDK CMake scripts or in the command line: +``` +cmake -B ./build -DAREG_LOGS:BOOL=OFF +``` + +**Microsoft Visual Studio**: Change the property value `AregLogs` in the property file `msvc_setup.props` + +### Application Bitness + +The defines `BIT32` and `BIT64` configures the build to target a 32- or 64-bit system. They are mutually exclusive and automatically set when choosing build platform. + +--- + +For further details, see the [CMake Configuration Options for Building AREG SDK](./02a-cmake-config.md) document, the configuration file [`user.cmake`](./../../conf/cmake/user.cmake), or Visual Studio property file [`msvc_setup`](./../../msvc_setup). diff --git a/docs/wiki/code-generator.md b/docs/wiki/03a-code-generator.md similarity index 97% rename from docs/wiki/code-generator.md rename to docs/wiki/03a-code-generator.md index 7c76168ca..c05fc7e3f 100644 --- a/docs/wiki/code-generator.md +++ b/docs/wiki/03a-code-generator.md @@ -42,11 +42,11 @@ The `codegen.jar` tool in the AREG SDK is a powerful utility that automates the ## Integration Tips Use AREG **CMake functions** from [functions.cmake](./../../conf/cmake/functions.cmake) to automate file generation and inclusion: -- **addServiceInterface**: Generates files in `${AREG_GENERATE_DIR}`, following a directory structure based on the `.siml` file’s parent path. +- **addServiceInterface**: Generates files in `${AREG_GENERATE_DIR}`, following a directory structure based on the `.siml` file's parent path. - **addServiceInterfaceEx**: Allows files to be generated in any specified location. - **macro_add_service_interface**: Uses the specified code generator and location for generated files. -For automated code generation and inclusion **with Microsoft Visual Studio**, refer to [Integrating AREG Framework with Microsoft Visual Studio](./msvc-integrate.md). +For automated code generation and inclusion **with Microsoft Visual Studio**, refer to [Integrating AREG Framework with Microsoft Visual Studio](./02d-msvc-integrate.md). ## Example Workflow @@ -73,7 +73,7 @@ For automated code generation and inclusion **with Microsoft Visual Studio**, re ``` - Replace ``, ``, and `` as appropriate. -3. **Add Generated Files to Project**: Place the generated files in the static library project’s source directory, compile, and link them with the AREG SDK. +3. **Add Generated Files to Project**: Place the generated files in the static library project's source directory, compile, and link them with the AREG SDK. 4. **Implement Application Logic**: Use the generated stubs and clients to manage requests, responses, broadcasts, and other events, enabling the development of core functionality. diff --git a/docs/wiki/logging-config.md b/docs/wiki/04a-logging-config.md similarity index 80% rename from docs/wiki/logging-config.md rename to docs/wiki/04a-logging-config.md index 0ead5678d..1477f40af 100644 --- a/docs/wiki/logging-config.md +++ b/docs/wiki/04a-logging-config.md @@ -2,6 +2,15 @@ The AREG SDK offers a highly configurable logging system via the **AREG log configuration file** (`areg.init`), allowing customization of log files, destinations, scope settings, and message priority to support enhanced debugging and runtime analysis. +## Table of Contents + +- [Key Configuration Options](#key-configuration-options) +- [Log Mechanisms and Destinations](#log-mechanisms-and-destinations) +- [Remote Log Collector Configuration](#remote-log-collector-configuration) +- [Scopes and Log Priorities](#scopes-and-log-priorities) + - [Log Priority Levels](#log-priority-levels) +- [Conclusion](#conclusion) + --- ## Key Configuration Options @@ -12,7 +21,7 @@ The `areg.init` file, located in the `./config` folder by default, structures lo - **module**: Targets specific applications or globally (`*`). - **property & position**: Defines settings like file paths, destinations, and logging levels. -For more syntax details, see the [AREG SDK Persistence Syntax documentation](./persistence-syntax.md). +For more syntax details, see the [AREG SDK Persistence Syntax documentation](./06a-persistence-syntax.md). --- @@ -32,7 +41,15 @@ Example setup: log::*::target = remote | file | debug | db log::*::enable::file = true log::*::file::location = ./logs/%appname%_%time%.log -``` +```- [AREG SDK Logging Configuration Guide](#areg-sdk-logging-configuration-guide) + - [Key Configuration Options](#key-configuration-options) + - [Log Mechanisms and Destinations](#log-mechanisms-and-destinations) + - [Configuring Log Message Layout](#configuring-log-message-layout) + - [Remote Log Collector Configuration](#remote-log-collector-configuration) + - [Scopes and Log Priorities](#scopes-and-log-priorities) + - [Log Priority Levels](#log-priority-levels) + - [Conclusion](#conclusion) + The `log::*::enable` setting manages log activation, while parameters (e.g., `log::*::remote::queue`) optimize start-up or delayed connections. The file naming mask `%appname%_%time%.log` dynamically includes the application name and timestamp. @@ -75,13 +92,13 @@ logger::*::address::tcpip = 127.0.0.1 logger::*::port::tcpip = 8282 ``` -This setup enables central log collection over a network. Scopes and priorities are adjustable in real-time through the [Log Observer](./logobserver.md) console application. +This setup enables central log collection over a network. Scopes and priorities are adjustable in real-time through the [Log Observer](./04c-logobserver.md) console application. --- ## Scopes and Log Priorities -AREG’s logging system supports selective logging by scope and priority, enabling efficient log filtering. Configure scopes in the `log` section using the `scope` property (`log::*::scope::*`) for initial setup. +AREG's logging system supports selective logging by scope and priority, enabling efficient log filtering. Configure scopes in the `log` section using the `scope` property (`log::*::scope::*`) for initial setup. Scopes can be enabled, disabled, or grouped by priority. Example configurations: ```plaintext @@ -106,7 +123,7 @@ Supported priorities include: For instance, `WARN | SCOPE` logs *Warnings*, *Errors*, *Fatal Errors*, and scope *Enter/Exit*, excluding *Debug* and *Information* levels. The priority `DEBUG | SCOPE` will log all messages. -The AREG Framework allows runtime adjustments using the `logobserver` tool, providing real-time control over scopes and priorities. For details, see the [Log Observer documentation](./logobserver.md). +The AREG Framework allows runtime adjustments using the `logobserver` tool, providing real-time control over scopes and priorities. For details, see the [Log Observer documentation](./04c-logobserver.md). --- diff --git a/docs/wiki/logging-develop.md b/docs/wiki/04b-logging-develop.md similarity index 87% rename from docs/wiki/logging-develop.md rename to docs/wiki/04b-logging-develop.md index 6d0d7c180..cf0b569c3 100644 --- a/docs/wiki/logging-develop.md +++ b/docs/wiki/04b-logging-develop.md @@ -6,11 +6,13 @@ The AREG Framework features a robust, adaptable logging system ideal for monitor ## Table of Contents -1. [Overview](#overview) -2. [Compile-Time Log Activation](#compile-time-log-activation) -3. [Enabling & Disabling Logs](#enabling-disabling-logs) -4. [Scopes & Logging](#scopes-logging) -5. [Logging Configuration](#logging-configuration) +- [Overview](#overview) +- [Compile-Time Log Activation](#compile-time-log-activation) +- [Enabling \& Disabling Logs](#enabling--disabling-logs) + - [Activating Logs via the `Application` Class](#activating-logs-via-the-application-class) + - [Activating Logs via Macros](#activating-logs-via-macros) +- [Scopes \& Logging](#scopes--logging) +- [Logging Configuration](#logging-configuration) --- @@ -104,4 +106,4 @@ Activated scopes log relevant messages, enabling developers to trace method call ## Logging Configuration -Configure logging settings via a configuration file (e.g., `areg.init`) located in the `./config` folder post-compilation. This file allows defining log files, activating specific scopes, and setting message priorities. See the [Logging Configuration guide](./logging-config.md) for detailed setup instructions, which enable customized log management and integration with the [Log Collector](./logcollector.md). +Configure logging settings via a configuration file (e.g., `areg.init`) located in the `./config` folder post-compilation. This file allows defining log files, activating specific scopes, and setting message priorities. See the [Logging Configuration guide](./04a-logging-config.md) for detailed setup instructions, which enable customized log management and integration with the [Log Collector](./04d-logcollector.md). diff --git a/docs/wiki/logobserver.md b/docs/wiki/04c-logobserver.md similarity index 83% rename from docs/wiki/logobserver.md rename to docs/wiki/04c-logobserver.md index eefc1fff0..b578cac3a 100644 --- a/docs/wiki/logobserver.md +++ b/docs/wiki/04c-logobserver.md @@ -1,19 +1,19 @@ # AREG SDK Log Observer Application -The **AREG SDK Log Observer** is a console tool designed for real-time log monitoring, data management, and dynamic control over log entries received from multiple applications distributed in the network. Acting as a client to the [Log Collector](./logcollector.md), the Log Observer allows users to save logs to text files and/or SQLite databases while dynamically adjusting scope activation and filtering log priorities during runtime. +The **AREG SDK Log Observer** is a console tool designed for real-time log monitoring, data management, and dynamic control over log entries received from multiple applications distributed in the network. Acting as a client to the [Log Collector](./04d-logcollector.md), the Log Observer allows users to save logs to text files and/or SQLite databases while dynamically adjusting scope activation and filtering log priorities during runtime. ## Table of Contents -1. [General Information](#general-information) -2. [Log Observer Setup](#log-observer-setup) -3. [Log Observer Configuration](#log-observer-configuration) -4. [Command Line Options](#command-line-options) -5. [Connection Initialization](#connection-initialization) +- [General Information](#general-information) +- [Log Observer Setup](#log-observer-setup) +- [Log Observer Configuration](#log-observer-configuration) +- [Command Line Options](#command-line-options) +- [Connection Initialization](#connection-initialization) --- ## General Information -The AREG SDK Log Observer functions as a client application for the [Log Collector](./logcollector.md) service, seamlessly integrating within AREG SDK's logging ecosystem. It enables centralized log storage in plain text and/or SQLite databases, providing extensive analysis capabilities for logs gathered from multiple applications distributed in the network. Through bi-directional communication with logging sources, the Log Observer lets users adjust scope activation and message priorities during runtime to optimize network traffic, ensuring only relevant log data is captured for analysis. +The AREG SDK Log Observer functions as a client application for the [Log Collector](./04d-logcollector.md) service, seamlessly integrating within AREG SDK's logging ecosystem. It enables centralized log storage in plain text and/or SQLite databases, providing extensive analysis capabilities for logs gathered from multiple applications distributed in the network. Through bi-directional communication with logging sources, the Log Observer lets users adjust scope activation and message priorities during runtime to optimize network traffic, ensuring only relevant log data is captured for analysis. --- @@ -42,7 +42,7 @@ Setting descriptions: | `logger::*::service` | Specifies the log collector process name. | | `logger::*::connect` | Lists supported protocols (TCP/IP in this example). | | `logger::*::enable::tcpip` | Activates or deactivates the protocol. | -| `logger::*::address::tcpip` | Specifies the Log Collector’s network-accessible IP. | +| `logger::*::address::tcpip` | Specifies the Log Collector's network-accessible IP. | | `logger::*::port::tcpip` | Assigns the port number. | **Additional Log Observer-Specific Settings:** diff --git a/docs/wiki/logcollector.md b/docs/wiki/04d-logcollector.md similarity index 95% rename from docs/wiki/logcollector.md rename to docs/wiki/04d-logcollector.md index adc21786e..9c1347472 100644 --- a/docs/wiki/logcollector.md +++ b/docs/wiki/04d-logcollector.md @@ -15,7 +15,7 @@ The **AREG SDK Log Collector** is a centralized service designed to gather, mana ## General Information -The AREG SDK Log Collector acts as a networking service within the AREG SDK's logging ecosystem. It facilitates centralized log collection by receiving logs from multiple applications, making them accessible to log observers for in-depth analysis and management. This service enables tailored log configurations, including specific scopes and priority levels, promoting efficient tracking and debugging across distributed applications. By integrating with the AREG SDK’s logging tools, the Log Collector enhances monitoring capabilities and provides an efficient pathway for real-time diagnostics in complex multiprocess scenarios. +The AREG SDK Log Collector acts as a networking service within the AREG SDK's logging ecosystem. It facilitates centralized log collection by receiving logs from multiple applications, making them accessible to log observers for in-depth analysis and management. This service enables tailored log configurations, including specific scopes and priority levels, promoting efficient tracking and debugging across distributed applications. By integrating with the AREG SDK's logging tools, the Log Collector enhances monitoring capabilities and provides an efficient pathway for real-time diagnostics in complex multiprocess scenarios. --- @@ -62,13 +62,13 @@ Setting descriptions: | `logger::*::service` | Specifies the log collector process name. | | `logger::*::connect` | Lists supported protocols (TCP/IP in this example). | | `logger::*::enable::tcpip` | Activates or deactivates the protocol. | -| `logger::*::address::tcpip` | Specifies the Log Collector’s network-accessible IP. | +| `logger::*::address::tcpip` | Specifies the Log Collector's network-accessible IP. | | `logger::*::port::tcpip` | Assigns the port number. | -For further details, refer to the [AREG SDK Persistence Syntax documentation](./persistence-syntax.md). +For further details, refer to the [AREG SDK Persistence Syntax documentation](./06a-persistence-syntax.md). > [!NOTE] -> AREG SDK includes a console tool application, `logobserver`, for capturing logs, adjusting log scopes, filtering priorities, and saving logs to a file or SQLite database. More details are available in the [logobserver documentation](./logobserver.md). +> AREG SDK includes a console tool application, `logobserver`, for capturing logs, adjusting log scopes, filtering priorities, and saving logs to a file or SQLite database. More details are available in the [logobserver documentation](./04c-logobserver.md). --- diff --git a/docs/wiki/mcrouter.md b/docs/wiki/05a-mcrouter.md similarity index 94% rename from docs/wiki/mcrouter.md rename to docs/wiki/05a-mcrouter.md index 097fecfb7..0fd55f1e8 100644 --- a/docs/wiki/mcrouter.md +++ b/docs/wiki/05a-mcrouter.md @@ -3,13 +3,13 @@ The **Multicast Router (mcrouter)** in AREG SDK enables efficient communication between Service Provider and Consumer nodes within a networked environment. ## Table of Contents -1. [General Information](#general-information) -2. [Router Setup](#router-setup) -3. [Router Configuration](#router-configuration) -4. [Command Line Options](#command-line-options) -5. [Connection Initialization](#connection-initialization) - - [mcrouter Initialization](#mcrouter-initialization) - - [Application Setup](#application-setup) +- [General Information](#general-information) +- [Router Setup](#router-setup) +- [Router Configuration](#router-configuration) +- [Command Line Options](#command-line-options) +- [Connection Initialization](#connection-initialization) + - [mcrouter Initialization](#mcrouter-initialization) + - [Application Setup](#application-setup) --- @@ -67,10 +67,10 @@ Bellow is the explanation of each setting: | `router::*::service` | Specifies the message router process name. | | `router::*::connect` | Lists supported protocols (**TCP/IP** in this example). | | `router::*::enable::tcpip` | Enables or disables the protocol. | -| `router::*::address::tcpip` | Provides the router’s network-accessible IP. | +| `router::*::address::tcpip` | Provides the router's network-accessible IP. | | `router::*::port::tcpip` | Assigns the port number. | -For further details, refer to the [AREG SDK Persistence Syntax](./persistence-syntax.md). +For further details, refer to the [AREG SDK Persistence Syntax](./06a-persistence-syntax.md). --- diff --git a/docs/wiki/persistence-syntax.md b/docs/wiki/06a-persistence-syntax.md similarity index 100% rename from docs/wiki/persistence-syntax.md rename to docs/wiki/06a-persistence-syntax.md diff --git a/docs/wiki/README.md b/docs/wiki/README.md index e217a6a21..2df0b99c9 100644 --- a/docs/wiki/README.md +++ b/docs/wiki/README.md @@ -1,4 +1,48 @@ -# AREG SDK Technical Guidance +

+AREG SDK Home +

AREG SDK Technical Guidance +

-> [!NOTE] -> This file is reserved as a Readme document for the technical guidance. +[**AREG (Automated Real-time Event Grid) Framework**](https://github.com/aregtech/areg-sdk) is a cutting-edge interface-centric solution designed to facilitate real-time asynchronous communication in distributed and mist-computing environments. The communication engine powering the AREG Software Development Kit (SDK) supports **Inter-Process Communication (IPC)**, it is built upon the **Object Remote Procedure Call (Object RPC)** protocol, helping developers create scalable, multitasking applications across multiple platforms. At the heart of the AREG SDK lies the AREG Framework written in C++, which comprises various software components and tools to simplify the development of distributed, real-time, and asynchronous applications. This framework enables connected Things to interact and offer services, functioning like lightweight distributed micro-servers. + +These pages serve as comprehensive resources, providing detailed descriptions of the AREG SDK framework, along with practical examples and a range of accompanying tools. + +## Getting Started + +The following sections guide you through installing, configuring, and using the AREG SDK, with links to more detailed documentation. + +1. **Installation and Setup** + - **[Installing and Using AREG SDK with vcpkg Package Manager](./01a-areg-package.md)**: Guide to installing the AREG SDK with the `vcpkg` package manager. + - **[Building AREG SDK with CMake](./01b-cmake-build.md)**: Instructions for building the AREG SDK using CMake. + - **[Building the AREG SDK with Microsoft Visual Studio and MSBuild](./01c-msvc-build.md)**: Steps to set up and build the AREG SDK in Visual Studio. + - **[Building AREG SDK on Windows Subsystem for Linux (WSL)](./01d-wsl-build.md)**: Building the AREG SDK on WSL for a Linux environment within Windows. + +2. **Configuration and Build Options** + - **[CMake Configuration Options for Building AREG SDK](./02a-cmake-config.md)**: Overview of CMake options for building and customizing AREG SDK. + - **[AREG SDK CMake Functions and Macros](./02b-cmake-functions.md)**: Details on CMake functions and macros provided by AREG SDK. + - **[Integrating AREG Framework with CMake](./02c-cmake-integrate.md)**: Steps to integrate AREG SDK in your CMake projects. + - **[Integrating AREG Framework with Microsoft Visual Studio](./02d-msvc-integrate.md)**: How to link and use AREG SDK within Visual Studio projects. + - **[AREG SDK Preprocessor Definitions Guide: Configuration and Usage Across Toolchains](./02e-preprocessor-definitions.md)**: Comprehensive guide to configuring preprocessor definitions for the AREG SDK across different development environments and toolchains. + +3. **Development Tools** + - **[AREG SDK Code Generator (`codegen.jar`)](./03a-code-generator.md)**: Guide for using AREG SDK's code generator to create service interfaces and streamline development. + +4. **Logging and Monitoring** + - **[AREG SDK Logging Configuration Guide](./04a-logging-config.md)**: Setting up and configuring logging within AREG SDK applications. + - **[Developing with AREG Logging System](./04b-logging-develop.md)**: Instructions for integrating logging into your applications. + - **[AREG SDK Log Observer Application](./04c-logobserver.md)**: A guide to observing logs in real time. + - **[AREG SDK Log Collector Service](./04d-logcollector.md)**: Configuration and use of AREG SDK's log collector for centralized log management. + +5. **Networking and Communication** + - **[AREG SDK Multicast Router](./05a-mcrouter.md)**: Information on setting up multicast communication for distributed applications. + +6. **Data Management** + - **[Key-Value Data Persistence Syntax in AREG SDK](./06a-persistence-syntax.md)**: Persistent data storage and management using AREG SDK's key-value storage options. + +``` +Help us to make docs greater. +See something is wrong, unclear or need a help? +Submit a change, open a discussion or ask AREG SDK community a question. + +2023-2024 © Aregtech, www.aregtech.com, email: info[at]aregtech.com +``` diff --git a/docs/wiki/build.md b/docs/wiki/build.md deleted file mode 100644 index 75b4bf5bd..000000000 --- a/docs/wiki/build.md +++ /dev/null @@ -1 +0,0 @@ -Placeholder to explain the software build. diff --git a/docs/wiki/vscode.md b/docs/wiki/vscode.md deleted file mode 100644 index 9ee1abd3a..000000000 --- a/docs/wiki/vscode.md +++ /dev/null @@ -1 +0,0 @@ -Placeholder of instructions to build in VSCode. \ No newline at end of file diff --git a/examples/09_svcmulti/ReadMe.md b/examples/09_svcmulti/ReadMe.md index 2f3572bab..4d521d622 100644 --- a/examples/09_svcmulti/ReadMe.md +++ b/examples/09_svcmulti/ReadMe.md @@ -17,7 +17,7 @@ The **09_svcmulti** project builds upon the concepts from the [08_service](./../ ## Project Structure - **Service Instantiation**: The project shows how to define and instantiate multiple instances of the same service, each with a unique role. -- **Application Model**: The services are defined in the application’s model, which controls their roles and behavior during runtime. +- **Application Model**: The services are defined in the application's model, which controls their roles and behavior during runtime. - **Multithreading**: The services are executed in separate threads, providing a clear example of how to handle multiple service providers concurrently. ## Use Cases diff --git a/examples/10_locsvc/ReadMe.md b/examples/10_locsvc/ReadMe.md index a1d9a0851..1bbbcb73f 100644 --- a/examples/10_locsvc/ReadMe.md +++ b/examples/10_locsvc/ReadMe.md @@ -1,6 +1,6 @@ # 10_locsvc Project Overview -The **10_locsvc** project demonstrates creating and managing a **Local Service** within the AREG Framework, using the Service Interface document and AREG SDK’s code generator. This example shows how to build a service provider and consumer that communicate asynchronously within a single, multithreaded process, without external visibility. +The **10_locsvc** project demonstrates creating and managing a **Local Service** within the AREG Framework, using the Service Interface document and AREG SDK's code generator. This example shows how to build a service provider and consumer that communicate asynchronously within a single, multithreaded process, without external visibility. The **Local Service** interface is defined in the [HelloWorld.siml](./services/HelloWorld.siml) file, and the corresponding source code is automatically generated during the build process via `codegen.jar`. diff --git a/examples/12_pubsvc/ReadMe.md b/examples/12_pubsvc/ReadMe.md index f4f0dd582..e42346332 100644 --- a/examples/12_pubsvc/ReadMe.md +++ b/examples/12_pubsvc/ReadMe.md @@ -20,7 +20,7 @@ The **12_pubsvc** project demonstrates the implementation of a *Public Service* - An application acting as a network-discoverable *Public Service* provider. It listens for remote requests from consumers and processes them. Multiple *Service Consumers* can connect to the provider simultaneously, sending requests to be handled. 3. **[12_pubclient](./pubclient/)**: - - An application that acts as a *Public Service* consumer. The client application automatically discovers the *Public Service* provider using AREG Frameworks’s built-in service discovery. It periodically sends remote request calls using a timer, simulating real-world use cases where a service might need regular interactions with the provider. + - An application that acts as a *Public Service* consumer. The client application automatically discovers the *Public Service* provider using AREG Frameworks's built-in service discovery. It periodically sends remote request calls using a timer, simulating real-world use cases where a service might need regular interactions with the provider. ## Communication @@ -31,7 +31,7 @@ The **12_pubsvc** project demonstrates the implementation of a *Public Service* - **Automatic Service Discovery**: AREG Framework automates the discovery of the *Public Service*, so *Service Consumers* can easily connect to the provider without needing explicit configuration. This ensures smooth communication even when the processes are started in any order. -- **Fault Tolerance**: The AREG SDK ensures fault tolerance in service communication, meaning if a service fails, it can recover or restart without affecting the overall system’s operation. +- **Fault Tolerance**: The AREG SDK ensures fault tolerance in service communication, meaning if a service fails, it can recover or restart without affecting the overall system's operation. - **Efficient Communication**: By using **Object RPC** for communication, the system reduces overhead and simplifies the development process. It ensures that requests and responses between the provider and consumers are dispatched efficiently. diff --git a/examples/13_pubmesh/ReadMe.md b/examples/13_pubmesh/ReadMe.md index 140ba3f02..7291e85d5 100644 --- a/examples/13_pubmesh/ReadMe.md +++ b/examples/13_pubmesh/ReadMe.md @@ -1,6 +1,6 @@ # 13_pubmesh Project Overview -The **13_pubmesh** project demonstrates the AREG Framework’s capability to manage a **meshed network** of **distributed services**, integrating both **Public** and **Local Services**. The project showcases how the framework efficiently connects **Service Providers** and **Service Consumers** to handle **inter-process communication (IPC)** using *Object Remote Procedure Call (Object RPC)*, enabling scalable and reliable communication across the network. +The **13_pubmesh** project demonstrates the AREG Framework's capability to manage a **meshed network** of **distributed services**, integrating both **Public** and **Local Services**. The project showcases how the framework efficiently connects **Service Providers** and **Service Consumers** to handle **inter-process communication (IPC)** using *Object Remote Procedure Call (Object RPC)*, enabling scalable and reliable communication across the network. > [!IMPORTANT] > To test this example, ensure an `mcrouter` process is running on a network-accessible machine to enable message routing. Verify that the `areg.init` configuration file includes the correct IP address and port number for the `mcrouter`. diff --git a/examples/14_pubtraffic/ReadMe.md b/examples/14_pubtraffic/ReadMe.md index 8db421cf7..4eff193e9 100644 --- a/examples/14_pubtraffic/ReadMe.md +++ b/examples/14_pubtraffic/ReadMe.md @@ -24,7 +24,7 @@ The **14_pubtraffic** project demonstrates how to dynamically create and manage ## Communication -Communication between the service provider and consumers is facilitated by **mcrouter** router, which is capable of operating across any networked machine. The AREG Framework automates **service discovery** and ensures **fault tolerance**, enabling reliable **IPC** and ensuring that the order of process startup does not affect the system’s functionality. Services are automatically discovered, and messages are forwarded seamlessly to their intended recipients, maintaining robust inter-process communication. +Communication between the service provider and consumers is facilitated by **mcrouter** router, which is capable of operating across any networked machine. The AREG Framework automates **service discovery** and ensures **fault tolerance**, enabling reliable **IPC** and ensuring that the order of process startup does not affect the system's functionality. Services are automatically discovered, and messages are forwarded seamlessly to their intended recipients, maintaining robust inter-process communication. ## Key Features @@ -36,8 +36,8 @@ Communication between the service provider and consumers is facilitated by **mcr - **Dynamic Runtime Model Creation**: This project is ideal for applications that require models or objects to be created dynamically during runtime, offering flexibility in service configuration and operation. - **Real-time Inter-Process Communication (IPC)**: Suitable for systems where real-time communication between distributed services is essential, leveraging **Object RPC** and **IPC** to ensure reliable message exchange. -- **Custom Event-Driven Systems**: Applications that rely on custom event handling can benefit from the project’s approach to managing user-triggered events in a multithreaded environment. +- **Custom Event-Driven Systems**: Applications that rely on custom event handling can benefit from the project's approach to managing user-triggered events in a multithreaded environment. ## Conclusion -The **14_pubtraffic** project highlights the AREG SDK’s capabilities in managing **dynamic models** and **custom events** within a **multithreaded** and **distributed system**. Through the use of **Object RPC** and **IPC**, the project demonstrates how to achieve real-time communication and event handling, making it a valuable example for developers looking to build scalable, event-driven applications. +The **14_pubtraffic** project highlights the AREG SDK's capabilities in managing **dynamic models** and **custom events** within a **multithreaded** and **distributed system**. Through the use of **Object RPC** and **IPC**, the project demonstrates how to achieve real-time communication and event handling, making it a valuable example for developers looking to build scalable, event-driven applications. diff --git a/examples/15_pubworker/ReadMe.md b/examples/15_pubworker/ReadMe.md index 25d4b5ffe..853a7f6f3 100644 --- a/examples/15_pubworker/ReadMe.md +++ b/examples/15_pubworker/ReadMe.md @@ -20,7 +20,7 @@ The **15_pubworker** project demonstrates the use of **Worker Threads** to perfo - This sub-project includes a **Service Consumer** and a **Worker Thread**. The Worker Thread simulates an output device, performing tasks in the background while the service consumer interacts with the public service provider. 3. **[15_pubservice](./pubservice/)**: - - This sub-project hosts a **Public Service Provider** along with a **Worker Thread** that processes user inputs from the console and updates the service’s attributes. Both the service and worker thread are part of the static model, which is initialized at startup and unloaded at exit. + - This sub-project hosts a **Public Service Provider** along with a **Worker Thread** that processes user inputs from the console and updates the service's attributes. Both the service and worker thread are part of the static model, which is initialized at startup and unloaded at exit. ## Communication diff --git a/examples/16_pubfsm/ReadMe.md b/examples/16_pubfsm/ReadMe.md index 03824bc45..87dab3032 100644 --- a/examples/16_pubfsm/ReadMe.md +++ b/examples/16_pubfsm/ReadMe.md @@ -1,6 +1,6 @@ # 16_pubfsm Project Overview -The **16_pubfsm** project demonstrates how to build and manage a *Finite-State Machine* (**FSM**) using the AREG Framework’s powerful features like *Timers* and *Events*. This project showcases how FSM models can be developed to change the data and the states of Services. +The **16_pubfsm** project demonstrates how to build and manage a *Finite-State Machine* (**FSM**) using the AREG Framework's powerful features like *Timers* and *Events*. This project showcases how FSM models can be developed to change the data and the states of Services. > [!IMPORTANT] > To test this example, ensure an `mcrouter` process is running on a network-accessible machine to enable message routing. Verify that the `areg.init` configuration file includes the correct IP address and port number for the `mcrouter`. @@ -33,7 +33,7 @@ The **16_pubfsm** project demonstrates how to build and manage a *Finite-State M ## Communication and Service Discovery -- **mcrouter**: The communication between the *Service Provider* and *Service Consumers* is managed through `mcrouter`, AREG’s router for handling RPC message routing and inter-process communication. +- **mcrouter**: The communication between the *Service Provider* and *Service Consumers* is managed through `mcrouter`, AREG's router for handling RPC message routing and inter-process communication. - **Service Discovery and Fault Tolerance**: The AREG Framework ensures automatic service discovery and fault tolerance, meaning the order in which services start is irrelevant. This makes the system robust and reliable even in unpredictable environments. ## Use Cases @@ -44,4 +44,4 @@ The **16_pubfsm** project demonstrates how to build and manage a *Finite-State M ## Conclusion -The **16_pubfsm** project highlights the AREG Framework’s ability to efficiently implement a *Finite-State Machine*. Whether you're developing device application or any event-driven systems, this project provides a scalable, robust solution using FSM, triggers, timers, and events. By leveraging the AREG SDK�s features like service discovery and fault tolerance, developers can focus on building highly reliable, state-based systems with ease. +The **16_pubfsm** project highlights the AREG Framework's ability to efficiently implement a *Finite-State Machine*. Whether you're developing device application or any event-driven systems, this project provides a scalable, robust solution using FSM, triggers, timers, and events. By leveraging the AREG SDK's features like service discovery and fault tolerance, developers can focus on building highly reliable, state-based systems with ease. diff --git a/examples/19_pubwatchdog/ReadMe.md b/examples/19_pubwatchdog/ReadMe.md index 5b858419c..a6bd4deea 100644 --- a/examples/19_pubwatchdog/ReadMe.md +++ b/examples/19_pubwatchdog/ReadMe.md @@ -29,7 +29,7 @@ The **19_pubwatchdog** project demonstrates the use of a **Watchdog** in an envi ## Communication -Communication between the service provider and consumers is facilitated by **mcrouter** router, which is capable of operating across any networked machine. The AREG Framework automates **service discovery** and ensures **fault tolerance**, enabling reliable **IPC** and ensuring that the order of process startup does not affect the system’s functionality. Services are automatically discovered, and messages are forwarded seamlessly to their intended recipients, maintaining robust inter-process communication. +Communication between the service provider and consumers is facilitated by **mcrouter** router, which is capable of operating across any networked machine. The AREG Framework automates **service discovery** and ensures **fault tolerance**, enabling reliable **IPC** and ensuring that the order of process startup does not affect the system's functionality. Services are automatically discovered, and messages are forwarded seamlessly to their intended recipients, maintaining robust inter-process communication. ## Key Features diff --git a/examples/21_pubunblock/ReadMe.md b/examples/21_pubunblock/ReadMe.md index 3535056b2..3553bfd9d 100644 --- a/examples/21_pubunblock/ReadMe.md +++ b/examples/21_pubunblock/ReadMe.md @@ -24,13 +24,13 @@ The **21_pubunblock** project demonstrates how to handle and manually unblock se ## Communication -Communication between the service provider and consumers is facilitated by **mcrouter** router, which is capable of operating across any networked machine. The AREG Framework automates **service discovery** and ensures **fault tolerance**, enabling reliable **IPC** and ensuring that the order of process startup does not affect the system’s functionality. Services are automatically discovered, and messages are forwarded seamlessly to their intended recipients, maintaining robust inter-process communication. +Communication between the service provider and consumers is facilitated by **mcrouter** router, which is capable of operating across any networked machine. The AREG Framework automates **service discovery** and ensures **fault tolerance**, enabling reliable **IPC** and ensuring that the order of process startup does not affect the system's functionality. Services are automatically discovered, and messages are forwarded seamlessly to their intended recipients, maintaining robust inter-process communication. ## Key Features - **Request Manual Unblocking**: The core feature of this project is the ability to manually unblock requests, allowing the service provider to continue processing new requests while waiting to complete ongoing ones. This prevents the system with asynchronous communication from stalling. - **Non-Blocking Client Responses**: Normally, when a client request is processed and the developer replies with the response, the system automatically prepares the response and sends to the target Consumer. In case of manual request unblocking, the develop needs manually preparing response, then reply with the response. This response preparation mechanism ensures that the right target Consumer receives the response. -- **Fault-Tolerant Communication**: Leveraging `mcrouter` and the AREG SDK’s fault-tolerant capabilities, the system can manage communication failures gracefully, ensuring that service providers and consumers can reconnect and resume operations without data loss. +- **Fault-Tolerant Communication**: Leveraging `mcrouter` and the AREG SDK's fault-tolerant capabilities, the system can manage communication failures gracefully, ensuring that service providers and consumers can reconnect and resume operations without data loss. ## Use Cases diff --git a/examples/22_pubsub/ReadMe.md b/examples/22_pubsub/ReadMe.md index e6e64458c..a16cd0376 100644 --- a/examples/22_pubsub/ReadMe.md +++ b/examples/22_pubsub/ReadMe.md @@ -31,7 +31,7 @@ This project uses **Object Remote Procedure Call (Object RPC)** for efficient ** ## Communication -Communication between the service provider and consumers is facilitated by **mcrouter** router, which is capable of operating across any networked machine. The AREG Framework automates **service discovery** and ensures **fault tolerance**, enabling reliable **IPC** and ensuring that the order of process startup does not affect the system’s functionality. Services are automatically discovered, and messages are forwarded seamlessly to their intended recipients, maintaining robust inter-process communication. +Communication between the service provider and consumers is facilitated by **mcrouter** router, which is capable of operating across any networked machine. The AREG Framework automates **service discovery** and ensures **fault tolerance**, enabling reliable **IPC** and ensuring that the order of process startup does not affect the system's functionality. Services are automatically discovered, and messages are forwarded seamlessly to their intended recipients, maintaining robust inter-process communication. ## Key Features @@ -50,4 +50,4 @@ Communication between the service provider and consumers is facilitated by **mcr ## Conclusion -The **22_pubsub** project showcases a scalable implementation of the Pub/Sub model, supporting effective communication between distributed processes with **Object RPC** and **IPC**. By leveraging the AREG SDK’s service discovery and fault tolerance, the project provides a reliable and flexible solution for real-time data distribution in multi-process environments. This project is suited for scenarios requiring efficient, continuous data streams, demonstrating how publishers and subscribers interact smoothly in a distributed system. +The **22_pubsub** project showcases a scalable implementation of the Pub/Sub model, supporting effective communication between distributed processes with **Object RPC** and **IPC**. By leveraging the AREG SDK's service discovery and fault tolerance, the project provides a reliable and flexible solution for real-time data distribution in multi-process environments. This project is suited for scenarios requiring efficient, continuous data streams, demonstrating how publishers and subscribers interact smoothly in a distributed system. diff --git a/examples/23_pubsubmix/ReadMe.md b/examples/23_pubsubmix/ReadMe.md index 1123fd0ad..1089bd735 100644 --- a/examples/23_pubsubmix/ReadMe.md +++ b/examples/23_pubsubmix/ReadMe.md @@ -36,7 +36,7 @@ Using **Object Remote Procedure Call (Object RPC)** for efficient **Inter-Proces - **Hybrid Communication**: The Pub/Sub system supports both local and remote subscribers, allowing any process to function as both a **Publisher** and **Subscriber** simultaneously. - **Network Resilience**: All **Publishers** and **Subscribers** within the same process receive updates regardless of network connectivity, ensuring uninterrupted service. -- **Immediate Data Updates**: Subscribers automatically receive the latest data upon connecting, ensuring they’re always up-to-date even if no recent updates have been published. +- **Immediate Data Updates**: Subscribers automatically receive the latest data upon connecting, ensuring they're always up-to-date even if no recent updates have been published. - **Dynamic Subscription and Publishing**: Both *23_pubsubctrl* and *23_pubsubdyn* can seamlessly switch between publisher and subscriber roles, making the system highly adaptable in dynamic, multi-process environments. - **Fault-Tolerant Communication**: With `mcrouter` and the AREG SDK, the system remains fault-tolerant, supporting automatic service discovery and recovery, ensuring reliable Pub/Sub functionality even during failures. diff --git a/examples/24_pubsubmulti/ReadMe.md b/examples/24_pubsubmulti/ReadMe.md index 880f532e2..573480b5c 100644 --- a/examples/24_pubsubmulti/ReadMe.md +++ b/examples/24_pubsubmulti/ReadMe.md @@ -7,7 +7,7 @@ The **24_pubsubmulti** project demonstrates the use of a *Public Service* in a m ## Key Concepts -- **Efficient Event Delivery**: The project illustrates how AREG’s Pub/Sub system minimizes event notifications by sending updates only when necessary, ensuring that subscribers receive only relevant data. +- **Efficient Event Delivery**: The project illustrates how AREG's Pub/Sub system minimizes event notifications by sending updates only when necessary, ensuring that subscribers receive only relevant data. - **Multiple Subscribers in One Thread**: It demonstrates a scenario where multiple subscribers, residing in the same thread, subscribe to the same data, but at different times. - **Dynamic Subscription**: Each subscriber can dynamically subscribe to the published data, with notifications sent only when the data changes or based on predefined settings. @@ -38,7 +38,7 @@ This dual-mode notification system offers flexibility depending on the use case, ## Key Features -- **Optimized Data Delivery**: AREG Frameworks’s Pub/Sub system ensures that updates are sent efficiently, reducing unnecessary message traffic. This results in more optimized performance, especially in systems with multiple subscribers. +- **Optimized Data Delivery**: AREG Frameworks's Pub/Sub system ensures that updates are sent efficiently, reducing unnecessary message traffic. This results in more optimized performance, especially in systems with multiple subscribers. - **Multiple Subscribers in One Thread**: The ability to have multiple subscribers within the same thread receiving data updates demonstrates how AREG Framework can handle complex subscription scenarios without performance overhead. - **Automatic Service Discovery**: The AREG Framework automates the discovery of the publisher by the subscribers, making process startup order irrelevant. Subscribers can dynamically connect to the publisher without needing to know the details of its location beforehand. @@ -46,8 +46,8 @@ This dual-mode notification system offers flexibility depending on the use case, - **Real-Time Data Monitoring**: The **24_pubsubmulti** project is ideal for applications where real-time data updates need to be delivered to multiple subscribers efficiently. This is particularly useful in scenarios where minimizing network traffic is important. - **Multiple Subscriber Scenarios**: The ability to run multiple subscribers in a single process or a thread demonstrates how complex subscription patterns can be managed without introducing additional resource consumption. -- **Change-Driven Notifications**: The project’s support for *On Change* notifications makes it suitable for applications where updates are required only when data values change, improving performance in bandwidth-constrained environments. +- **Change-Driven Notifications**: The project's support for *On Change* notifications makes it suitable for applications where updates are required only when data values change, improving performance in bandwidth-constrained environments. ## Conclusion -The **24_pubsubmulti** project showcases an efficient Pub/Sub system for multi-process environments, with a focus on minimizing event generation and ensuring efficient data delivery. By allowing multiple subscribers to coexist within a single thread and dynamically receive updates, the project highlights how AREG Framework’s Pub/Sub features can be used to build scalable and high-performance systems. The use of **Object RPC** for **Inter-Process Communication (IPC)**, combined with the fault-tolerant communication of `mcrouter`, ensures that the system remains robust and flexible, making it suitable for a wide range of real-time data distribution use cases. +The **24_pubsubmulti** project showcases an efficient Pub/Sub system for multi-process environments, with a focus on minimizing event generation and ensuring efficient data delivery. By allowing multiple subscribers to coexist within a single thread and dynamically receive updates, the project highlights how AREG Framework's Pub/Sub features can be used to build scalable and high-performance systems. The use of **Object RPC** for **Inter-Process Communication (IPC)**, combined with the fault-tolerant communication of `mcrouter`, ensures that the system remains robust and flexible, making it suitable for a wide range of real-time data distribution use cases. diff --git a/examples/README.md b/examples/README.md index 900779082..44a2f45a7 100644 --- a/examples/README.md +++ b/examples/README.md @@ -3,7 +3,7 @@ ``` This document is part of the AREG SDK and describes its examples. -Copyright © 2017-2023, Aregtech +Copyright (c) 2017-2023, Aregtech Contact: info[at]aregtech.com Website: https://www.aregtech.com ``` @@ -42,7 +42,7 @@ cmake --build ./build -j 20 > cmake -B ./build -DAREG_EXAMPLES:BOOL=OFF > ``` -For more details, refer to the [Build Documentation](./../docs/wiki/BUILD.md), also see the list of default CMake variable settings in the [user.cmake](./../conf/cmake/user.cmake) file. +For more details, refer to the [Building AREG SDK with CMake](./../docs/wiki/01b-cmake-build.md), also see the list of default CMake variable settings in the [user.cmake](./../conf/cmake/user.cmake) file. ### 3. Build with Microsoft Visual Studio