# SignalR-Client-Cpp **Repository Path**: mirrors_aspnet/SignalR-Client-Cpp ## Basic Information - **Project Name**: SignalR-Client-Cpp - **Description**: C++ Client for ASP.NET Core SignalR - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-08-08 - **Last Updated**: 2025-11-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README > [!WARNING] > This project is in alpha mode and not recommended for production use. Use at your own risk. # ASP.NET Core SignalR C++ Client This project is part of ASP.NET Core. You can find samples, documentation and getting started instructions for ASP.NET Core at https://github.com/aspnet/AspNetCore. Use https://github.com/dotnet/aspnetcore/issues for issues with this project. ## Install this library > [!WARNING] > Websockets are currently disabled which means the client will fail to connect to a SignalR server. > Workaround by providing a custom websocket client implementation and using it via `builder.with_websocket_factory(...)`. > A new websocket implementation will be provided in-box in a future commit. There are multiple ways to build this library * **Currently missing due to websocket issues.** ~~Use [vcpkg](https://github.com/microsoft/vcpkg) and install the library with `vcpkg install microsoft-signalr`~~ * Build from [command line](#command-line-build) * Build in Visual Studio (must have the "Desktop Development with C++" workload) by selecting the "Open a local folder" option and selecting the repository root folder ## Command line build Below are instructions to build on different OS's. You can also use the following options to customize the build: | Command line | Description | Default value | | --- | --- | --- | | -DBUILD_SAMPLES | Build the included sample project | false | | -DBUILD_TESTING | Builds the test project | true | | -DUSE_CPPRESTSDK | Includes the CppRestSDK (default http stack) (requires cpprestsdk to be installed) | false | | -DUSE_MSGPACK | Adds an option to use the MessagePack Hub Protocol (requires msgpack to be installed, e.g. `vcpkg install msgpack:x64-windows`) | false | | -DWERROR | Enables warnings as errors | true | | -DWALL | Enables all warnings | true | | -DINJECT_HEADER_AFTER_STDAFX=`
` | Adds the provided header to the library compilation in stdafx.cpp, intended to allow "new" and "delete" to be replaced. | `` | ### Build on Windows ### ```powershell PS> git submodule update --init PS> .\submodules\vcpkg\bootstrap-vcpkg.bat PS> .\submodules\vcpkg\vcpkg.exe install cpprestsdk:x64-windows jsoncpp:x64-windows PS> mkdir build.release PS> cd build.release PS> cmake .. -A x64 -DCMAKE_TOOLCHAIN_FILE="..\submodules\vcpkg\scripts\buildsystems\vcpkg.cmake" -DCMAKE_BUILD_TYPE=Release -DUSE_CPPRESTSDK=true PS> cmake --build . --config Release ``` Output will be in `build.release\bin\Release\` ### Build on Mac ### ```bash $ git submodule update --init $ brew install gcc6 $ ./submodules/vcpkg/bootstrap-vcpkg.sh $ ./submodules/vcpkg/vcpkg install cpprestsdk jsoncpp $ mkdir build.release $ cd build.release $ cmake .. -DCMAKE_TOOLCHAIN_FILE=../submodules/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DUSE_CPPRESTSDK=true $ cmake --build . --config Release ``` Output will be in `build.release/bin/` ### Build on Linux ### ```bash $ git submodule update --init $ ./submodules/vcpkg/bootstrap-vcpkg.sh $ ./submodules/vcpkg/vcpkg install cpprestsdk boost-system boost-chrono boost-thread jsoncpp $ mkdir build.release $ cd build.release $ cmake .. -DCMAKE_TOOLCHAIN_FILE=../submodules/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DUSE_CPPRESTSDK=true $ cmake --build . --config Release ``` Output will be in `build.release/bin/` ## Example usage ```cpp #include #include #include "signalrclient/hub_connection.h" #include "signalrclient/hub_connection_builder.h" #include "signalrclient/signalr_value.h" std::promise start_task; signalr::hub_connection connection = signalr::hub_connection_builder::create("http://localhost:5000/hub") //.with_messagepack_hub_protocol() //.with_websocket_factory(...) //.with_http_client_factory(...) .build(); connection.on("Echo", [](const std::vector& m) { std::cout << m[0].as_string() << std::endl; }); connection.start([&start_task](std::exception_ptr exception) { start_task.set_value(); }); start_task.get_future().get(); std::promise send_task; std::vector args { "Hello world" }; connection.invoke("Echo", args, [&send_task](const signalr::value& value, std::exception_ptr exception) { send_task.set_value(); }); send_task.get_future().get(); std::promise stop_task; connection.stop([&stop_task](std::exception_ptr exception) { stop_task.set_value(); }); stop_task.get_future().get(); ``` ### Example CMake file ``` cmake_minimum_required (VERSION 3.5) project (signalrclient-sample) find_package(microsoft-signalr REQUIRED) link_libraries(microsoft-signalr::microsoft-signalr) add_executable (sample sample.cpp) ```