Warning
This project is in alpha mode and not recommended for production use. Use at your own risk.
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.
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 and install the library withvcpkg install microsoft-signalr
- Build from command line
- 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
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=<header path> |
Adds the provided header to the library compilation in stdafx.cpp, intended to allow "new" and "delete" to be replaced. | <none> |
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\
$ 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/
$ 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/
#include <iostream>
#include <future>
#include "signalrclient/hub_connection.h"
#include "signalrclient/hub_connection_builder.h"
#include "signalrclient/signalr_value.h"
std::promise<void> 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<signalr::value>& 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<void> send_task;
std::vector<signalr::value> 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<void> stop_task;
connection.stop([&stop_task](std::exception_ptr exception) {
stop_task.set_value();
});
stop_task.get_future().get();
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)