diff --git a/CMakeLists.txt b/CMakeLists.txt index 67cd5323..b614663b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,7 @@ cmake_minimum_required(VERSION 3.16) project( "rpc.hpp" - VERSION 0.6.1 + VERSION 0.7.1 DESCRIPTION "Simple RPC Header-Only Library" LANGUAGES CXX ) @@ -162,6 +162,7 @@ elseif(CXX_CLANG) -Wno-documentation -Wno-documentation-unknown-command -Wno-weak-vtables + -Wno-reserved-identifier -Wno-reserved-id-macro -Wno-missing-braces -Wno-covered-switch-default) diff --git a/INSTALL.md b/INSTALL.md index 445b8baf..5c56a76a 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -24,7 +24,7 @@ $ cmake -B build -D BUILD_ADAPTER_BOOST_JSON=ON -D BUILD_ADAPTER_NJSON=ON -D BUI $ cmake --install build ``` -CMake version 3.12 or newer is required for this method, see below for instructions to install CMake +CMake version 3.16 or newer is required for this method, see below for instructions to install CMake if it is not already installed. ## Building and Testing the Project @@ -36,7 +36,7 @@ need to make sure that you can build the project and its test suite. While `rpc.hpp` is a header-only library, the project relies on using a buildsystem to perform certain tasks. -It is therefore required that CMake (version 3.12 or newer) is installed on your machine and +It is therefore required that CMake (version 3.16 or newer) is installed on your machine and available on your `$PATH` to build the project. Additionally, `rpc.hpp` requires at least one C++ compiler that fully supports C++17 or newer: @@ -209,16 +209,16 @@ $ mkdir build 3. Configure the project ```shell -$ cmake -B build -G Ninja -D BUILD_ADAPTER_BOOST_JSON=ON -D BUILD_ADAPTER_NJSON=ON -D BUILD_ADAPTER_RAPIDJSON=ON -D BUILD_TESTING=ON +$ cmake -B build -G Ninja -D BUILD_ADAPTER_BITSERY -D BUILD_ADAPTER_BOOST_JSON=ON -D BUILD_ADAPTER_NJSON=ON -D BUILD_ADAPTER_RAPIDJSON=ON -D BUILD_TESTING=ON ``` NOTE: The above command can be altered based on your needs: - In this example, the "Ninja" generator is used as it is fast, but `-G Ninja` may be omitted to use the system default make system -- With this example, all three adapters are to be built. By omitting one or more, they will not be +- With this example, all adapters are to be built. By omitting one or more, they will not be built (example: `-D BUILD_ADAPTER_BOOST_JSON=ON` could be omitted or set to `=OFF`) - - `BUILD_ADAPTER_NJSON` is required for testing + - **NOTE:** `BUILD_ADAPTER_NJSON` is required for testing - If using Conan to auto-install dependencies, make sure to set its option (add `-D DEPENDS_CONAN=ON`) - If using vcpkg to manage dependencies, make sure to set its option (add `-D DEPENDS_VCPKG=ON`) - You may also need to provide CMake with a vcpkg toolchain file: @@ -235,6 +235,7 @@ $ cmake --build build | Option | Description | |--|--| +| `BUILD_ADAPTER_BITSERY` | Build the adapter for Bitsery | | `BUILD_ADAPTER_BOOST_JSON` | Build the adapter for Boost.JSON | | `BUILD_ADAPTER_NJSON` | Build the adapter for nlohmann/json | | `BUILD_ADAPTER_RAPIDJSON` | Build the adapter for rapidjson | diff --git a/README.md b/README.md index bad8ac06..b5bc4e96 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,6 @@ server.cpp ```C++ #define RPC_HPP_SERVER_IMPL -#define RPC_HPP_ENABLE_NJSON #include #include @@ -101,7 +100,6 @@ client.cpp ```C++ #define RPC_HPP_CLIENT_IMPL -#define RPC_HPP_ENABLE_NJSON #include @@ -126,6 +124,11 @@ private: // Send mesg to server... } + void send(std::string&& mesg) override + { + // Send mesg to server... + } + std::string receive() override { // Get message back from server... diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index d880cf77..ae8186f9 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -77,6 +77,7 @@ endif() add_executable(rpc_benchmark benchmark.cpp) target_include_directories(rpc_benchmark PRIVATE ../tests) target_link_libraries(rpc_benchmark PRIVATE rpc_hpp catch2_lib asio_lib) +target_precompile_headers(rpc_benchmark PRIVATE pch.hpp) if(${BUILD_ADAPTER_BITSERY}) target_link_libraries(rpc_benchmark PRIVATE bitsery_adapter) diff --git a/benchmarks/benchmark.cpp b/benchmarks/benchmark.cpp index b1c6040f..39df21c8 100644 --- a/benchmarks/benchmark.cpp +++ b/benchmarks/benchmark.cpp @@ -1,26 +1,26 @@ -#define CATCH_CONFIG_ENABLE_BENCHMARKING -#define CATCH_CONFIG_MAIN #define RPC_HPP_CLIENT_IMPL - -#include "rpc.client.hpp" +#include "test_client/rpc.client.hpp" #include "test_structs.hpp" +#define CATCH_CONFIG_ENABLE_BENCHMARKING +#define CATCH_CONFIG_MAIN #include #if defined(RPC_HPP_ENABLE_BITSERY) const uint64_t rpc::adapters::bitsery::config::max_func_name_size = 30; -const uint64_t rpc::adapters::bitsery::config::max_string_size = 100; -const uint64_t rpc::adapters::bitsery::config::max_container_size = 100; +const uint64_t rpc::adapters::bitsery::config::max_string_size = 2048; +const uint64_t rpc::adapters::bitsery::config::max_container_size = 1'000; #endif TEST_CASE("By Value (simple)", "[value][simple][cached]") { constexpr uint64_t expected = 10946UL; + constexpr uint64_t input = 20; uint64_t test = 1; BENCHMARK("rpc.hpp (asio::tcp, njson)") { - test = GetClient().template call_func("Fibonacci", 20); + test = GetClient().template call_func("Fibonacci", input); }; REQUIRE(expected == test); @@ -30,7 +30,7 @@ TEST_CASE("By Value (simple)", "[value][simple][cached]") BENCHMARK("rpc.hpp (asio::tcp, rapidjson)") { - test = GetClient().template call_func("Fibonacci", 20); + test = GetClient().template call_func("Fibonacci", input); }; REQUIRE(expected == test); @@ -41,7 +41,7 @@ TEST_CASE("By Value (simple)", "[value][simple][cached]") BENCHMARK("rpc.hpp (asio::tcp, Boost.JSON)") { - test = GetClient().template call_func("Fibonacci", 20); + test = GetClient().template call_func("Fibonacci", input); }; REQUIRE(expected == test); @@ -52,7 +52,7 @@ TEST_CASE("By Value (simple)", "[value][simple][cached]") BENCHMARK("rpc.hpp (asio::tcp, bitsery)") { - test = GetClient().template call_func("Fibonacci", 20); + test = GetClient().template call_func("Fibonacci", input); }; REQUIRE(expected == test); @@ -64,15 +64,11 @@ TEST_CASE("By Value (complex)", "[value][complex][cached]") const std::string expected = "467365747274747d315a473a527073796c7e707b85"; std::string test; + const ComplexObject cx{ 24, "Franklin D. Roosevelt", false, true, + { 0, 1, 4, 6, 7, 8, 11, 15, 17, 22, 25, 26 } }; + BENCHMARK("rpc.hpp (asio::tcp, njson)") { - ComplexObject cx; - cx.flag1 = false; - cx.flag2 = true; - cx.id = 24; - cx.name = "Franklin D. Roosevelt"; - cx.vals = { 0, 1, 4, 6, 7, 8, 11, 15, 17, 22, 25, 26 }; - test = GetClient().template call_func("HashComplex", cx); }; @@ -83,13 +79,6 @@ TEST_CASE("By Value (complex)", "[value][complex][cached]") BENCHMARK("rpc.hpp (asio::tcp, rapidjson)") { - ComplexObject cx; - cx.flag1 = false; - cx.flag2 = true; - cx.id = 24; - cx.name = "Franklin D. Roosevelt"; - cx.vals = { 0, 1, 4, 6, 7, 8, 11, 15, 17, 22, 25, 26 }; - test = GetClient().template call_func("HashComplex", cx); }; @@ -101,13 +90,6 @@ TEST_CASE("By Value (complex)", "[value][complex][cached]") BENCHMARK("rpc.hpp (asio::tcp, Boost.JSON)") { - ComplexObject cx; - cx.flag1 = false; - cx.flag2 = true; - cx.id = 24; - cx.name = "Franklin D. Roosevelt"; - cx.vals = { 0, 1, 4, 6, 7, 8, 11, 15, 17, 22, 25, 26 }; - test = GetClient().template call_func("HashComplex", cx); }; @@ -119,13 +101,6 @@ TEST_CASE("By Value (complex)", "[value][complex][cached]") BENCHMARK("rpc.hpp (asio::tcp, bitsery)") { - ComplexObject cx; - cx.flag1 = false; - cx.flag2 = true; - cx.id = 24; - cx.name = "Franklin D. Roosevelt"; - cx.vals = { 0, 1, 4, 6, 7, 8, 11, 15, 17, 22, 25, 26 }; - test = GetClient().template call_func("HashComplex", cx); }; @@ -186,11 +161,12 @@ TEST_CASE("By Value (many)", "[value][many][cached]") TEST_CASE("By Reference (simple)", "[ref][simple]") { constexpr uint64_t expected = 10946UL; - uint64_t test = 20; + constexpr uint64_t input = 20; + uint64_t test{}; BENCHMARK("rpc.hpp (asio::tcp, njson)") { - test = 20; + test = input; GetClient().call_func("FibonacciRef", test); }; @@ -199,7 +175,7 @@ TEST_CASE("By Reference (simple)", "[ref][simple]") #if defined(RPC_HPP_ENABLE_RAPIDJSON) BENCHMARK("rpc.hpp (asio::tcp, rapidjson)") { - test = 20; + test = input; GetClient().call_func("FibonacciRef", test); }; #endif @@ -209,7 +185,7 @@ TEST_CASE("By Reference (simple)", "[ref][simple]") #if defined(RPC_HPP_ENABLE_BOOST_JSON) BENCHMARK("rpc.hpp (asio::tcp, Boost.JSON)") { - test = 20; + test = input; GetClient().call_func("FibonacciRef", test); }; @@ -219,7 +195,7 @@ TEST_CASE("By Reference (simple)", "[ref][simple]") #if defined(RPC_HPP_ENABLE_BITSERY) BENCHMARK("rpc.hpp (asio::tcp, bitsery)") { - test = 20; + test = input; GetClient().call_func("FibonacciRef", test); }; @@ -230,17 +206,17 @@ TEST_CASE("By Reference (simple)", "[ref][simple]") TEST_CASE("By Reference (complex)", "[ref][complex]") { const std::string expected = "467365747274747d315a473a527073796c7e707b85"; + const ComplexObject input{ 24, "Franklin D. Roosevelt", false, true, + { 0, 1, 4, 6, 7, 8, 11, 15, 17, 22, 25, 26 } }; + + ComplexObject cx{}; + std::string test; BENCHMARK("rpc.hpp (asio::tcp, njson)") { test.clear(); - ComplexObject cx; - cx.flag1 = false; - cx.flag2 = true; - cx.id = 24; - cx.name = "Franklin D. Roosevelt"; - cx.vals = { 0, 1, 4, 6, 7, 8, 11, 15, 17, 22, 25, 26 }; + cx = input; GetClient().call_func("HashComplexRef", cx, test); }; @@ -251,12 +227,7 @@ TEST_CASE("By Reference (complex)", "[ref][complex]") BENCHMARK("rpc.hpp (asio::tcp, rapidjson)") { test.clear(); - ComplexObject cx; - cx.flag1 = false; - cx.flag2 = true; - cx.id = 24; - cx.name = "Franklin D. Roosevelt"; - cx.vals = { 0, 1, 4, 6, 7, 8, 11, 15, 17, 22, 25, 26 }; + cx = input; GetClient().call_func("HashComplexRef", cx, test); }; @@ -268,12 +239,7 @@ TEST_CASE("By Reference (complex)", "[ref][complex]") BENCHMARK("rpc.hpp (asio::tcp, Boost.JSON)") { test.clear(); - ComplexObject cx; - cx.flag1 = false; - cx.flag2 = true; - cx.id = 24; - cx.name = "Franklin D. Roosevelt"; - cx.vals = { 0, 1, 4, 6, 7, 8, 11, 15, 17, 22, 25, 26 }; + cx = input; GetClient().call_func("HashComplexRef", cx, test); }; @@ -285,12 +251,7 @@ TEST_CASE("By Reference (complex)", "[ref][complex]") BENCHMARK("rpc.hpp (asio::tcp, bitsery)") { test.clear(); - ComplexObject cx; - cx.flag1 = false; - cx.flag2 = true; - cx.id = 24; - cx.name = "Franklin D. Roosevelt"; - cx.vals = { 0, 1, 4, 6, 7, 8, 11, 15, 17, 22, 25, 26 }; + cx = input; GetClient().call_func("HashComplexRef", cx, test); }; @@ -302,7 +263,7 @@ TEST_CASE("By Reference (complex)", "[ref][complex]") TEST_CASE("By Reference (many)", "[ref][many]") { constexpr double expected = 313.2216436152; - double test; + double test{}; BENCHMARK("rpc.hpp (asio::tcp, njson)") { @@ -402,13 +363,14 @@ TEST_CASE("By Reference (many)", "[ref][many]") TEST_CASE("With Container", "[container][cached]") { constexpr double expected = 1731.8635996333; + const std::vector input{ 55.65, 125.325, 552.125, 12.767, 2599.6, 1245.125663, 9783.49, + 125.12, 553.3333333333, 2266.1 }; + double test = 1.0; BENCHMARK("rpc.hpp (asio::tcp, njson)") { - const std::vector vec{ 55.65, 125.325, 552.125, 12.767, 2599.6, 1245.125663, - 9783.49, 125.12, 553.3333333333, 2266.1 }; - + const auto& vec = input; test = GetClient().template call_func("AverageContainer", vec); }; @@ -420,9 +382,7 @@ TEST_CASE("With Container", "[container][cached]") BENCHMARK("rpc.hpp (asio::tcp, rapidjson)") { - const std::vector vec{ 55.65, 125.325, 552.125, 12.767, 2599.6, 1245.125663, - 9783.49, 125.12, 553.3333333333, 2266.1 }; - + const auto& vec = input; test = GetClient().template call_func( "AverageContainer", vec); }; @@ -433,9 +393,7 @@ TEST_CASE("With Container", "[container][cached]") BENCHMARK("rpc.hpp (asio::tcp, Boost.JSON)") { - const std::vector vec{ 55.65, 125.325, 552.125, 12.767, 2599.6, 1245.125663, - 9783.49, 125.12, 553.3333333333, 2266.1 }; - + const auto& vec = input; test = GetClient().template call_func( "AverageContainer", vec); }; @@ -446,9 +404,7 @@ TEST_CASE("With Container", "[container][cached]") BENCHMARK("rpc.hpp (asio::tcp, bitsery)") { - const std::vector vec{ 55.65, 125.325, 552.125, 12.767, 2599.6, 1245.125663, - 9783.49, 125.12, 553.3333333333, 2266.1 }; - + const auto& vec = input; test = GetClient().template call_func( "AverageContainer", vec); }; @@ -457,10 +413,14 @@ TEST_CASE("With Container", "[container][cached]") TEST_CASE("Sequential", "[sequential][cached]") { + constexpr uint64_t min_num = 5; + constexpr uint64_t max_num = 30; + constexpr size_t num_rands = 1'000; + BENCHMARK("rpc.hpp (asio::tcp, njson)") { auto vec = GetClient().template call_func>( - "GenRandInts", 5, 30, 1000); + "GenRandInts", min_num, max_num, num_rands); for (auto& val : vec) { @@ -475,7 +435,7 @@ TEST_CASE("Sequential", "[sequential][cached]") BENCHMARK("rpc.hpp (asio::tcp, rapidjson)") { auto vec = GetClient().template call_func>( - "GenRandInts", 5, 30, 1000); + "GenRandInts", min_num, max_num, num_rands); for (auto& val : vec) { @@ -491,7 +451,7 @@ TEST_CASE("Sequential", "[sequential][cached]") BENCHMARK("rpc.hpp (asio::tcp, bjson)") { auto vec = GetClient().template call_func>( - "GenRandInts", 5, 30, 1000); + "GenRandInts", min_num, max_num, num_rands); for (auto& val : vec) { @@ -507,7 +467,7 @@ TEST_CASE("Sequential", "[sequential][cached]") BENCHMARK("rpc.hpp (asio::tcp, bitsery)") { auto vec = GetClient().template call_func>( - "GenRandInts", 5, 30, 1000); + "GenRandInts", min_num, max_num, num_rands); for (auto& val : vec) { @@ -531,5 +491,6 @@ TEST_CASE("KillServer", } catch (...) { + // Exception is expected so continue } } diff --git a/benchmarks/meson.build b/benchmarks/meson.build deleted file mode 100644 index c0adb59a..00000000 --- a/benchmarks/meson.build +++ /dev/null @@ -1,57 +0,0 @@ -# BSD 3-Clause License -# -# Copyright (c) 2020-2021, Jackson Harmer -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -asio_dep = dependency('asio') -catch2_dep = dependency('catch2', version : ['>2.10.0', '<3.0.0']) -thread_dep = dependency('threads') - -bench_dependencies = [rpc_hpp_dep, asio_dep, catch2_dep, thread_dep] -bench_defines = [] - -if get_option('build_adapter_boost_json') - bench_dependencies += [boost_json_adapter_dep] - bench_defines += ['-DRPC_HPP_ENABLE_BOOST_JSON'] -endif - -if get_option('build_adapter_njson') - bench_dependencies += [njson_adapter_dep] - bench_defines += ['-DRPC_HPP_ENABLE_NJSON'] -endif - -if get_option('build_adapter_rapidjson') - bench_dependencies += [rapidjson_adapter_dep] - bench_defines += ['-DRPC_HPP_ENABLE_RAPIDJSON'] -endif - -rpc_bench_exe = executable('rpc_benchmark', 'benchmark.cpp', include_directories : '../tests', dependencies : bench_dependencies, install : false, cpp_args : [project_warnings, bench_defines]) - -if get_option('buildtype') in ['debugoptimized', 'release'] - benchmark('rpc_benchmark', rpc_bench_exe, args : ['--benchmark-samples 20'], timeout : 90) -endif diff --git a/benchmarks/pch.hpp b/benchmarks/pch.hpp new file mode 100644 index 00000000..f134bdc5 --- /dev/null +++ b/benchmarks/pch.hpp @@ -0,0 +1,41 @@ +#pragma once + +// Standard Library +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// 3rd Party +#include + +#if defined(RPC_HPP_ENABLE_BITSERY) +# include +# include +# include +# include +# include +# include +#endif + +#if defined(RPC_HPP_ENABLE_BOOST_JSON) +# include +#endif + +#if defined(RPC_HPP_ENABLE_NJSON) +# include +#endif + +#if defined(RPC_HPP_ENABLE_RAPIDJSON) +# include +# include +# include +#endif diff --git a/dispatch_gen.py b/dispatch_gen.py index 76a5e06f..d53ab0b4 100644 --- a/dispatch_gen.py +++ b/dispatch_gen.py @@ -129,11 +129,11 @@ f.write("#if defined(RPC_HPP_SERVER_IMPL) || defined(RPC_HPP_MODULE_IMPL)\n") f.write( - "# define RPC_HEADER_FUNC(RETURN, FUNCNAME, ...) extern RETURN (*FUNCNAME)(__VA_ARGS__)\n" + "# define RPC_HEADER_FUNC(RETURN, FUNCNAME, ...) extern RETURN (* const FUNCNAME)(__VA_ARGS__)\n" ) f.write("#elif defined(RPC_HPP_CLIENT_IMPL)\n") f.write( - "# define RPC_HEADER_FUNC(RETURN, FUNCNAME, ...) inline RETURN (*FUNCNAME)(__VA_ARGS__) = nullptr" + "# define RPC_HEADER_FUNC(RETURN, FUNCNAME, ...) inline RETURN (* const FUNCNAME)(__VA_ARGS__) = nullptr\n" ) f.write("#endif\n\n") diff --git a/docs/annotated.html b/docs/annotated.html index a319094a..cdabf4da 100644 --- a/docs/annotated.html +++ b/docs/annotated.html @@ -22,7 +22,7 @@
rpc.hpp -  0.6.1 +  0.7.1
Simple RPC Header-Only Library
@@ -68,17 +68,38 @@
Here are the classes, structs, unions and interfaces with brief descriptions:
-
[detail level 123]
+
[detail level 12345]
- - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 NrpcTop-level namespace for rpc.hpp classes and functions
 NclientNamespace containing functions and classes only relevant to "client-side" implentations
 Cclient_interfaceClass defining an interface for calling into an RPC server or module
 NserverNamespace containing functions and classes only relevant to "server-side" implentations
 Cserver_interfaceClass defining an interface for serving functions via RPC
 Cpacked_funcObject representing a function call, including the function's name, arguments and result
 Cpacked_func< void, Args... >Object representing a void returning function call, including the function's name and arguments
 Cpack_adapterClass collecting several functions for interoperating between serial objects and a packed_func
 Cserver_interfaceClass defining an interface for serving functions via RPC
 Cclient_interfaceClass defining an interface for calling into an RPC server or module
 Nadapters
 Nbitsery
 Ndetails
 Clargest
 Clargest< T, 0 >
 Clargest< T, 3 >
 Clargest< T, 4 >
 Clargest< T, 6 >
 Cpack_helper
 Cpack_helper< void, Args... >
 NclientNamespace containing functions and classes only relevant to "client-side" implentations
 Cclient_interfaceClass defining an interface for calling into an RPC server or module
 Nexceptions
 Crpc_exception
 Cfunction_not_found
 Cremote_exec_error
 Cserialization_error
 Cdeserialization_error
 Cfunction_mismatch
 Cclient_send_error
 Cclient_receive_error
 Cserver_send_error
 Cserver_receive_error
 NserverNamespace containing functions and classes only relevant to "server-side" implentations
 Cserver_interfaceClass defining an interface for serving functions via RPC
 Cpack_adapterClass collecting several functions for interoperating between serial objects and a packed_func
 Cserver_interfaceClass defining an interface for serving functions via RPC
 Cclient_interfaceClass defining an interface for calling into an RPC server or module
 Nstd
 Chash< std::vector< uint8_t > >
diff --git a/docs/classes.html b/docs/classes.html index a54bda22..106f50be 100644 --- a/docs/classes.html +++ b/docs/classes.html @@ -22,7 +22,7 @@
rpc.hpp -  0.6.1 +  0.7.1
Simple RPC Header-Only Library
@@ -67,17 +67,32 @@
Class Index
-
C | P | S
+
C | D | F | H | L | P | R | S
C
-
client_interface (rpc::client)
client_interface (rpc)
+
client_interface (rpc::client)
client_interface (rpc)
client_receive_error (rpc::exceptions)
client_send_error (rpc::exceptions)
+
+
D
+
deserialization_error (rpc::exceptions)
+
+
F
+
function_mismatch (rpc::exceptions)
function_not_found (rpc::exceptions)
+
+
H
+
hash< std::vector< uint8_t > > (std)
+
+
L
+
largest (rpc::adapters::bitsery::details)
largest< T, 0 > (rpc::adapters::bitsery::details)
largest< T, 3 > (rpc::adapters::bitsery::details)
largest< T, 4 > (rpc::adapters::bitsery::details)
largest< T, 6 > (rpc::adapters::bitsery::details)
P
-
pack_adapter (rpc)
packed_func (rpc)
packed_func< void, Args... > (rpc)
+
pack_adapter (rpc)
pack_helper (rpc::adapters::bitsery::details)
pack_helper< void, Args... > (rpc::adapters::bitsery::details)
+
R
+
remote_exec_error (rpc::exceptions)
rpc_exception (rpc::exceptions)
+
S
-
server_interface (rpc::server)
server_interface (rpc)
+
serialization_error (rpc::exceptions)
server_interface (rpc::server)
server_interface (rpc)
server_receive_error (rpc::exceptions)
server_send_error (rpc::exceptions)
diff --git a/docs/classrpc_1_1client_1_1client__interface-members.html b/docs/classrpc_1_1client_1_1client__interface-members.html index 5a7d4481..6bd4b43f 100644 --- a/docs/classrpc_1_1client_1_1client__interface-members.html +++ b/docs/classrpc_1_1client_1_1client__interface-members.html @@ -22,7 +22,7 @@
rpc.hpp -  0.6.1 +  0.7.1
Simple RPC Header-Only Library
@@ -74,10 +74,19 @@

This is the complete list of members for rpc::client::client_interface< Serial >, including all inherited members.

- + + + + + + + + + - + +
call_func(std::string func_name, Args &&... args)rpc::client::client_interface< Serial >inline
call_func(const std::string &func_name, Args &&... args)rpc::client::client_interface< Serial >inline
call_func(std::string &&func_name, Args &&... args)rpc::client::client_interface< Serial >inline
call_header_func_impl([[maybe_unused]] R(*func)(Args...), const std::string &func_name, Args &&... args) (defined in rpc::client::client_interface< Serial >)rpc::client::client_interface< Serial >inline
call_header_func_impl([[maybe_unused]] R(*func)(Args...), std::string &&func_name, Args &&... args) (defined in rpc::client::client_interface< Serial >)rpc::client::client_interface< Serial >inline
client_interface() noexcept=default (defined in rpc::client::client_interface< Serial >)rpc::client::client_interface< Serial >
client_interface(const client_interface &)=delete (defined in rpc::client::client_interface< Serial >)rpc::client::client_interface< Serial >
client_interface(client_interface &&) noexcept=default (defined in rpc::client::client_interface< Serial >)rpc::client::client_interface< Serial >
operator=(const client_interface &)=delete (defined in rpc::client::client_interface< Serial >)rpc::client::client_interface< Serial >
operator=(client_interface &&)=delete (defined in rpc::client::client_interface< Serial >)rpc::client::client_interface< Serial >
receive()=0rpc::client::client_interface< Serial >protectedpure virtual
send(const typename Serial::bytes_t &bytes)=0rpc::client::client_interface< Serial >protectedpure virtual
~client_interface()=default (defined in rpc::client::client_interface< Serial >)rpc::client::client_interface< Serial >virtual
send(typename Serial::bytes_t &&bytes)=0rpc::client::client_interface< Serial >protectedpure virtual
~client_interface() noexcept=default (defined in rpc::client::client_interface< Serial >)rpc::client::client_interface< Serial >virtual