Skip to content
This repository was archived by the owner on Mar 12, 2021. It is now read-only.

Commit d101afc

Browse files
moozzykmoozzyk
authored andcommitted
SimpleSample - adding samples showing persistent connection and hubs usage
1 parent c95cd9d commit d101afc

32 files changed

Lines changed: 16386 additions & 4 deletions

Build/build.msbuild

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,21 @@
1313
</ItemGroup>
1414

1515
<ItemGroup>
16-
<TestHostProjects Include="$(SolutionDir)test\signalrclient-testhost\signalrclient-testhost.csproj" />
16+
<ManagedProjects Include="$(SolutionDir)test\signalrclient-testhost\signalrclient-testhost.csproj" />
17+
<ManagedProjects Include="$(SolutionDir)\samples\SignalRServer\SignalRServer.csproj" />
18+
</ItemGroup>
19+
20+
<ItemGroup>
21+
<SampleProjects Include="$(SolutionDir)\samples\PersistentConnectionSample\PersistentConnectionSample.vcxproj" />
22+
<SampleProjects Include="$(SolutionDir)\samples\HubConnectionSample\HubConnectionSample.vcxproj" />
1723
</ItemGroup>
1824

1925
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
2026

2127
<Target Name="Build">
2228
<MSBuild Targets="RestorePackages" Projects="@(Projects)" />
29+
<MSBuild Targets="RestorePackages" Projects="@(SampleProjects)" />
30+
<MSBuild Targets="RestorePackages" Projects="@(ManagedProjects)" />
2331

2432
<MSBuild Targets="$(BuildTargets)"
2533
Projects="@(Projects)"
@@ -30,7 +38,15 @@
3038
Properties="Configuration=$(Configuration);Platform=$(Platform);PlatformToolset=$(PlatformToolset)" />
3139

3240
<MSBuild Targets="$(BuildTargets)"
33-
Projects="@(TestHostProjects)"
41+
Projects="@(TestProjects)"
42+
Properties="Configuration=$(Configuration);Platform=$(Platform);PlatformToolset=$(PlatformToolset)" />
43+
44+
<MSBuild Targets="$(BuildTargets)"
45+
Projects="@(SampleProjects)"
46+
Properties="Configuration=$(Configuration);Platform=$(Platform);PlatformToolset=$(PlatformToolset)" />
47+
48+
<MSBuild Targets="$(BuildTargets)"
49+
Projects="@(ManagedProjects)"
3450
Properties="Configuration=$(Configuration)" />
3551
</Target>
3652

@@ -40,7 +56,9 @@
4056
<MSBuild Targets="Clean"
4157
Projects="@(TestProjects)" />
4258
<MSBuild Targets="Clean"
43-
Projects="@(TestHostProjects)" />
59+
Projects="@(SampleProjects)" />
60+
<MSBuild Targets="Clean"
61+
Projects="@(ManagedProjects)" />
4462
</Target>
4563

4664
<Target Name="Rebuild">
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#include "stdafx.h"
2+
3+
#include <iostream>
4+
#include <sstream>
5+
#include "signalrclient\hub_connection.h"
6+
7+
void send_message(signalr::hub_proxy proxy, const utility::string_t& name, const utility::string_t& message)
8+
{
9+
web::json::value args{};
10+
args[0] = web::json::value::string(name);
11+
args[1] = web::json::value(message);
12+
13+
// if you get an internal compiler error uncomment the lambda below or install VS Update 4
14+
proxy.invoke<void>(U("send"), args/*, [](const web::json::value&){}*/)
15+
.then([](pplx::task<void> invoke_task) // fire and forget but we need to observe exceptions
16+
{
17+
try
18+
{
19+
invoke_task.get();
20+
}
21+
catch (const std::exception &e)
22+
{
23+
ucout << U("Error while sending data: ") << e.what();
24+
}
25+
});
26+
}
27+
28+
void chat(const utility::string_t& name)
29+
{
30+
signalr::hub_connection connection{U("http://localhost:34281")};
31+
auto proxy = connection.create_hub_proxy(U("ChatHub"));
32+
proxy.on(U("broadcastMessage"), [](const web::json::value& m)
33+
{
34+
ucout << std::endl << m.at(0).as_string() << U(" wrote:") << m.at(1).as_string() << std::endl << U("Enter your message: ");
35+
});
36+
37+
connection.start()
38+
.then([proxy, name]()
39+
{
40+
ucout << U("Enter your message:");
41+
for (;;)
42+
{
43+
utility::string_t message;
44+
std::getline(ucin, message);
45+
46+
if (message == U(":q"))
47+
{
48+
break;
49+
}
50+
51+
send_message(proxy, name, message);
52+
}
53+
})
54+
.then([&connection]() // fine to capture by reference - we are blocking so it is guaranteed to be valid
55+
{
56+
return connection.stop();
57+
})
58+
.then([](pplx::task<void> stop_task)
59+
{
60+
try
61+
{
62+
stop_task.get();
63+
ucout << U("connection stopped successfully") << std::endl;
64+
}
65+
catch (const std::exception &e)
66+
{
67+
ucout << U("exception when starting or stopping connection: ") << e.what() << std::endl;
68+
}
69+
}).get();
70+
}
71+
72+
int main()
73+
{
74+
ucout << U("Enter your name: ");
75+
utility::string_t name;
76+
std::getline(ucin, name);
77+
78+
chat(name);
79+
80+
return 0;
81+
}
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<ItemGroup Label="ProjectConfigurations">
4+
<ProjectConfiguration Include="Debug|Win32">
5+
<Configuration>Debug</Configuration>
6+
<Platform>Win32</Platform>
7+
</ProjectConfiguration>
8+
<ProjectConfiguration Include="Release|Win32">
9+
<Configuration>Release</Configuration>
10+
<Platform>Win32</Platform>
11+
</ProjectConfiguration>
12+
</ItemGroup>
13+
<PropertyGroup Label="Globals">
14+
<ProjectGuid>{3C9BD092-18E6-4C6E-A887-CDFC80ACB206}</ProjectGuid>
15+
<Keyword>Win32Proj</Keyword>
16+
<RootNamespace>HubConnectionSample</RootNamespace>
17+
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
18+
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>
19+
<RestorePackages>true</RestorePackages>
20+
</PropertyGroup>
21+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
22+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
23+
<ConfigurationType>Application</ConfigurationType>
24+
<UseDebugLibraries>true</UseDebugLibraries>
25+
<PlatformToolset>v120</PlatformToolset>
26+
<CharacterSet>Unicode</CharacterSet>
27+
</PropertyGroup>
28+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
29+
<ConfigurationType>Application</ConfigurationType>
30+
<UseDebugLibraries>false</UseDebugLibraries>
31+
<PlatformToolset>v120</PlatformToolset>
32+
<WholeProgramOptimization>true</WholeProgramOptimization>
33+
<CharacterSet>Unicode</CharacterSet>
34+
</PropertyGroup>
35+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
36+
<ImportGroup Label="ExtensionSettings">
37+
<Import Project="..\..\packages\cpprestsdk.v120.windesktop.msvcstl.dyn.rt-dyn.2.5.0\build\native\cpprestsdk.v120.windesktop.msvcstl.dyn.rt-dyn.targets" Condition="Exists('..\..\packages\cpprestsdk.v120.windesktop.msvcstl.dyn.rt-dyn.2.5.0\build\native\cpprestsdk.v120.windesktop.msvcstl.dyn.rt-dyn.targets')" />
38+
<Import Project="..\..\packages\Microsoft.AspNet.SignalR.Client.Cpp.v120.WinDesktop.1.0.0-alpha-10013\build\native\Microsoft.AspNet.SignalR.Client.Cpp.v120.WinDesktop.targets" Condition="Exists('..\..\packages\Microsoft.AspNet.SignalR.Client.Cpp.v120.WinDesktop.1.0.0-alpha-10013\build\native\Microsoft.AspNet.SignalR.Client.Cpp.v120.WinDesktop.targets')" />
39+
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
40+
</ImportGroup>
41+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
42+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
43+
</ImportGroup>
44+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
45+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
46+
</ImportGroup>
47+
<PropertyGroup Label="UserMacros">
48+
<NuGetPackageImportStamp>17b14a35</NuGetPackageImportStamp>
49+
</PropertyGroup>
50+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
51+
<LinkIncremental>true</LinkIncremental>
52+
</PropertyGroup>
53+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
54+
<LinkIncremental>false</LinkIncremental>
55+
</PropertyGroup>
56+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
57+
<ClCompile>
58+
<PrecompiledHeader>Use</PrecompiledHeader>
59+
<WarningLevel>Level3</WarningLevel>
60+
<Optimization>Disabled</Optimization>
61+
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
62+
<SDLCheck>true</SDLCheck>
63+
</ClCompile>
64+
<Link>
65+
<SubSystem>Console</SubSystem>
66+
<GenerateDebugInformation>true</GenerateDebugInformation>
67+
</Link>
68+
</ItemDefinitionGroup>
69+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
70+
<ClCompile>
71+
<WarningLevel>Level3</WarningLevel>
72+
<PrecompiledHeader>Use</PrecompiledHeader>
73+
<Optimization>MaxSpeed</Optimization>
74+
<FunctionLevelLinking>true</FunctionLevelLinking>
75+
<IntrinsicFunctions>true</IntrinsicFunctions>
76+
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
77+
<SDLCheck>true</SDLCheck>
78+
</ClCompile>
79+
<Link>
80+
<SubSystem>Console</SubSystem>
81+
<GenerateDebugInformation>true</GenerateDebugInformation>
82+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
83+
<OptimizeReferences>true</OptimizeReferences>
84+
</Link>
85+
</ItemDefinitionGroup>
86+
<ItemGroup>
87+
<ClInclude Include="stdafx.h" />
88+
</ItemGroup>
89+
<ItemGroup>
90+
<ClCompile Include="HubConnectionSample.cpp" />
91+
<ClCompile Include="stdafx.cpp">
92+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
93+
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
94+
</ClCompile>
95+
</ItemGroup>
96+
<ItemGroup>
97+
<None Include="packages.config">
98+
<SubType>Designer</SubType>
99+
</None>
100+
</ItemGroup>
101+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
102+
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
103+
<PropertyGroup>
104+
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
105+
</PropertyGroup>
106+
<Error Condition="!Exists('..\..\packages\cpprestsdk.v120.windesktop.msvcstl.dyn.rt-dyn.2.5.0\build\native\cpprestsdk.v120.windesktop.msvcstl.dyn.rt-dyn.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\cpprestsdk.v120.windesktop.msvcstl.dyn.rt-dyn.2.5.0\build\native\cpprestsdk.v120.windesktop.msvcstl.dyn.rt-dyn.targets'))" />
107+
<Error Condition="!Exists('..\..\packages\Microsoft.AspNet.SignalR.Client.Cpp.v120.WinDesktop.1.0.0-alpha-10013\build\native\Microsoft.AspNet.SignalR.Client.Cpp.v120.WinDesktop.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.AspNet.SignalR.Client.Cpp.v120.WinDesktop.1.0.0-alpha-10013\build\native\Microsoft.AspNet.SignalR.Client.Cpp.v120.WinDesktop.targets'))" />
108+
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
109+
</Target>
110+
</Project>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<ItemGroup>
4+
<Filter Include="Source Files">
5+
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
6+
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
7+
</Filter>
8+
<Filter Include="Header Files">
9+
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
10+
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
11+
</Filter>
12+
<Filter Include="Resource Files">
13+
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
14+
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
15+
</Filter>
16+
</ItemGroup>
17+
<ItemGroup>
18+
<ClInclude Include="stdafx.h">
19+
<Filter>Header Files</Filter>
20+
</ClInclude>
21+
</ItemGroup>
22+
<ItemGroup>
23+
<ClCompile Include="stdafx.cpp">
24+
<Filter>Source Files</Filter>
25+
</ClCompile>
26+
<ClCompile Include="HubConnectionSample.cpp">
27+
<Filter>Source Files</Filter>
28+
</ClCompile>
29+
</ItemGroup>
30+
<ItemGroup>
31+
<None Include="packages.config" />
32+
</ItemGroup>
33+
</Project>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<packages>
3+
<package id="cpprestsdk.v120.windesktop.msvcstl.dyn.rt-dyn" version="2.5.0" targetFramework="Native" />
4+
<package id="Microsoft.AspNet.SignalR.Client.Cpp.v120.WinDesktop" version="1.0.0-alpha-10013" targetFramework="Native" />
5+
</packages>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#include "stdafx.h"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#pragma once
2+
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#include "stdafx.h"
2+
#include "signalrclient\connection.h"
3+
#include <iostream>
4+
5+
void send_message(signalr::connection &connection, const utility::string_t& message)
6+
{
7+
connection.send(message)
8+
.then([](pplx::task<void> send_task) // fire and forget but we need to observe exceptions
9+
{
10+
try
11+
{
12+
send_task.get();
13+
}
14+
catch (const std::exception &e)
15+
{
16+
ucout << U("Error while sending data: ") << e.what();
17+
}
18+
});
19+
}
20+
21+
int main()
22+
{
23+
signalr::connection connection{ U("http://localhost:34281/echo") };
24+
connection.set_message_received([](const utility::string_t& m)
25+
{
26+
ucout << U("Message received:") << m << std::endl << U("Enter message: ");
27+
});
28+
29+
connection.start()
30+
.then([&connection]() // fine to capture by reference - we are blocking so it is guaranteed to be valid
31+
{
32+
for (;;)
33+
{
34+
utility::string_t message;
35+
std::getline(ucin, message);
36+
37+
if (message == U(":q"))
38+
{
39+
break;
40+
}
41+
42+
send_message(connection, message);
43+
}
44+
45+
return connection.stop();
46+
})
47+
.then([](pplx::task<void> stop_task)
48+
{
49+
try
50+
{
51+
stop_task.get();
52+
ucout << U("connection stopped successfully") << std::endl;
53+
}
54+
catch (const std::exception &e)
55+
{
56+
ucout << U("exception when starting or closing connection: ") << e.what() << std::endl;
57+
}
58+
}).get();
59+
60+
return 0;
61+
}

0 commit comments

Comments
 (0)