Skip to content

Commit bae2832

Browse files
committed
fb
1 parent bffc2c6 commit bae2832

21 files changed

+304
-109
lines changed

src/SignalR/clients/cpp/include/signalrclient/connection.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ namespace signalr
2121
public:
2222
typedef std::function<void __cdecl(const utility::string_t&)> message_received_handler;
2323

24-
SIGNALRCLIENT_API explicit connection(const utility::string_t& url, const utility::string_t& query_string = _XPLATSTR(""),
25-
trace_level trace_level = trace_level::all, std::shared_ptr<log_writer> log_writer = nullptr);
24+
SIGNALRCLIENT_API explicit connection(const utility::string_t& url, trace_level trace_level = trace_level::all, std::shared_ptr<log_writer> log_writer = nullptr);
2625

2726
SIGNALRCLIENT_API ~connection();
2827

src/SignalR/clients/cpp/include/signalrclient/hub_connection.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ namespace signalr
2222
public:
2323
typedef std::function<void __cdecl (const web::json::value&)> method_invoked_handler;
2424

25-
SIGNALRCLIENT_API explicit hub_connection(const utility::string_t& url, const utility::string_t& query_string = _XPLATSTR(""),
26-
trace_level trace_level = trace_level::all, std::shared_ptr<log_writer> log_writer = nullptr);
25+
SIGNALRCLIENT_API explicit hub_connection(const utility::string_t& url, trace_level trace_level = trace_level::all,
26+
std::shared_ptr<log_writer> log_writer = nullptr);
2727

2828
SIGNALRCLIENT_API ~hub_connection();
2929

src/SignalR/clients/cpp/samples/HubConnectionSample/HubConnectionSample.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ void send_message(signalr::hub_connection& connection, const utility::string_t&
4141

4242
void chat(const utility::string_t& name)
4343
{
44-
signalr::hub_connection connection(U("http://localhost:5000/default"), U(""), signalr::trace_level::all, std::make_shared<logger>());
44+
signalr::hub_connection connection(U("http://localhost:5000/default"), signalr::trace_level::all, std::make_shared<logger>());
4545
connection.on(U("Send"), [](const web::json::value& m)
4646
{
4747
ucout << std::endl << m.at(0).as_string() << /*U(" wrote:") << m.at(1).as_string() <<*/ std::endl << U("Enter your message: ");

src/SignalR/clients/cpp/src/signalrclient/connection.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88

99
namespace signalr
1010
{
11-
connection::connection(const utility::string_t& url, const utility::string_t& query_string, trace_level trace_level, std::shared_ptr<log_writer> log_writer)
12-
: m_pImpl(connection_impl::create(url, query_string, trace_level, std::move(log_writer)))
11+
connection::connection(const utility::string_t& url, trace_level trace_level, std::shared_ptr<log_writer> log_writer)
12+
: m_pImpl(connection_impl::create(url, trace_level, std::move(log_writer)))
1313
{}
1414

1515
// Do NOT remove this destructor. Letting the compiler generate and inline the default dtor may lead to

src/SignalR/clients/cpp/src/signalrclient/connection_impl.cpp

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,21 @@ namespace signalr
2121
static void log(const logger& logger, trace_level level, const utility::string_t& entry);
2222
}
2323

24-
std::shared_ptr<connection_impl> connection_impl::create(const utility::string_t& url, const utility::string_t& query_string,
25-
trace_level trace_level, const std::shared_ptr<log_writer>& log_writer)
24+
std::shared_ptr<connection_impl> connection_impl::create(const utility::string_t& url, trace_level trace_level, const std::shared_ptr<log_writer>& log_writer)
2625
{
27-
return connection_impl::create(url, query_string, trace_level, log_writer, std::make_unique<web_request_factory>(), std::make_unique<transport_factory>());
26+
return connection_impl::create(url, trace_level, log_writer, std::make_unique<web_request_factory>(), std::make_unique<transport_factory>());
2827
}
2928

30-
std::shared_ptr<connection_impl> connection_impl::create(const utility::string_t& url, const utility::string_t& query_string, trace_level trace_level,
31-
const std::shared_ptr<log_writer>& log_writer, std::unique_ptr<web_request_factory> web_request_factory, std::unique_ptr<transport_factory> transport_factory)
29+
std::shared_ptr<connection_impl> connection_impl::create(const utility::string_t& url, trace_level trace_level, const std::shared_ptr<log_writer>& log_writer,
30+
std::unique_ptr<web_request_factory> web_request_factory, std::unique_ptr<transport_factory> transport_factory)
3231
{
33-
return std::shared_ptr<connection_impl>(new connection_impl(url, query_string, trace_level,
32+
return std::shared_ptr<connection_impl>(new connection_impl(url, trace_level,
3433
log_writer ? log_writer : std::make_shared<trace_log_writer>(), std::move(web_request_factory), std::move(transport_factory)));
3534
}
3635

37-
connection_impl::connection_impl(const utility::string_t& url, const utility::string_t& query_string, trace_level trace_level, const std::shared_ptr<log_writer>& log_writer,
36+
connection_impl::connection_impl(const utility::string_t& url, trace_level trace_level, const std::shared_ptr<log_writer>& log_writer,
3837
std::unique_ptr<web_request_factory> web_request_factory, std::unique_ptr<transport_factory> transport_factory)
39-
: m_base_url(url), m_query_string(query_string), m_connection_state(connection_state::disconnected), m_logger(log_writer, trace_level),
38+
: m_base_url(url), m_connection_state(connection_state::disconnected), m_logger(log_writer, trace_level),
4039
m_transport(nullptr), m_web_request_factory(std::move(web_request_factory)), m_transport_factory(std::move(transport_factory)),
4140
m_message_received([](const utility::string_t&) noexcept {}), m_disconnected([]() noexcept {})
4241
{ }
@@ -89,9 +88,9 @@ namespace signalr
8988

9089
pplx::task<void> connection_impl::start_negotiate(const web::uri& url, int redirect_count)
9190
{
92-
if (redirect_count >= 100)
91+
if (redirect_count >= MAX_NEGOTIATE_REDIRECTS)
9392
{
94-
return pplx::task_from_exception<void>(signalr_exception(_XPLATSTR("too many redirects during negotiate")));
93+
return pplx::task_from_exception<void>(signalr_exception(_XPLATSTR("Negotiate redirection limit exceeded.")));
9594
}
9695

9796
pplx::task_completion_event<void> start_tce;
@@ -106,8 +105,7 @@ namespace signalr
106105
{
107106
return pplx::task_from_exception<negotiation_response>(_XPLATSTR("connection no longer exists"));
108107
}
109-
return request_sender::negotiate(*connection->m_web_request_factory, url,
110-
connection->m_query_string, connection->m_signalr_client_config);
108+
return request_sender::negotiate(*connection->m_web_request_factory, url, connection->m_signalr_client_config);
111109
}, m_disconnect_cts.get_token())
112110
.then([weak_connection, start_tce, redirect_count, url](negotiation_response negotiation_response)
113111
{
@@ -127,7 +125,7 @@ namespace signalr
127125
if (!negotiation_response.accessToken.empty())
128126
{
129127
auto headers = connection->m_signalr_client_config.get_http_headers();
130-
headers.add(_XPLATSTR("Authorization"), _XPLATSTR("Bearer ") + negotiation_response.accessToken);
128+
headers[_XPLATSTR("Authorization")] = _XPLATSTR("Bearer ") + negotiation_response.accessToken;
131129
connection->m_signalr_client_config.set_http_headers(headers);
132130
}
133131
return connection->start_negotiate(negotiation_response.url, redirect_count + 1);
@@ -149,7 +147,7 @@ namespace signalr
149147

150148
if (!foundWebsockets)
151149
{
152-
return pplx::task_from_exception<void>(signalr_exception(_XPLATSTR("WebSockets is the only supported transport currently")));
150+
return pplx::task_from_exception<void>(signalr_exception(_XPLATSTR("The server does not support WebSockets which is currently the only transport supported by this client.")));
153151
}
154152

155153
// TODO: use transfer format
@@ -299,10 +297,7 @@ namespace signalr
299297
pplx::task<void> connection_impl::send_connect_request(const std::shared_ptr<transport>& transport, const web::uri& url, const pplx::task_completion_event<void>& connect_request_tce)
300298
{
301299
auto logger = m_logger;
302-
auto query_string = m_query_string;
303-
if (!query_string.empty())
304-
query_string.append(_XPLATSTR("&"));
305-
query_string.append(_XPLATSTR("id=")).append(m_connection_id);
300+
auto query_string = _XPLATSTR("id=" + m_connection_id);
306301
auto connect_url = url_builder::build_connect(url, transport->get_transport_type(), query_string);
307302

308303
transport->connect(connect_url)

src/SignalR/clients/cpp/src/signalrclient/connection_impl.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,10 @@ namespace signalr
2525
class connection_impl : public std::enable_shared_from_this<connection_impl>
2626
{
2727
public:
28-
static std::shared_ptr<connection_impl> create(const utility::string_t& url, const utility::string_t& query_string,
29-
trace_level trace_level, const std::shared_ptr<log_writer>& log_writer);
28+
static std::shared_ptr<connection_impl> create(const utility::string_t& url, trace_level trace_level, const std::shared_ptr<log_writer>& log_writer);
3029

31-
static std::shared_ptr<connection_impl> create(const utility::string_t& url, const utility::string_t& query_string, trace_level trace_level,
32-
const std::shared_ptr<log_writer>& log_writer, std::unique_ptr<web_request_factory> web_request_factory, std::unique_ptr<transport_factory> transport_factory);
30+
static std::shared_ptr<connection_impl> create(const utility::string_t& url, trace_level trace_level, const std::shared_ptr<log_writer>& log_writer,
31+
std::unique_ptr<web_request_factory> web_request_factory, std::unique_ptr<transport_factory> transport_factory);
3332

3433
connection_impl(const connection_impl&) = delete;
3534

@@ -50,7 +49,6 @@ namespace signalr
5049

5150
private:
5251
web::uri m_base_url;
53-
utility::string_t m_query_string;
5452
std::atomic<connection_state> m_connection_state;
5553
logger m_logger;
5654
std::shared_ptr<transport> m_transport;
@@ -69,7 +67,7 @@ namespace signalr
6967
utility::string_t m_message_id;
7068
utility::string_t m_groups_token;
7169

72-
connection_impl(const utility::string_t& url, const utility::string_t& query_string, trace_level trace_level, const std::shared_ptr<log_writer>& log_writer,
70+
connection_impl(const utility::string_t& url, trace_level trace_level, const std::shared_ptr<log_writer>& log_writer,
7371
std::unique_ptr<web_request_factory> web_request_factory, std::unique_ptr<transport_factory> transport_factory);
7472

7573
pplx::task<std::shared_ptr<transport>> start_transport(const web::uri& url);

src/SignalR/clients/cpp/src/signalrclient/constants.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@
88
#define SIGNALR_VERSION _XPLATSTR("0.1.0-alpha0")
99
#define PROTOCOL _XPLATSTR("1.4")
1010
#define USER_AGENT _XPLATSTR("SignalR.Client.Cpp/") SIGNALR_VERSION
11+
#define MAX_NEGOTIATE_REDIRECTS 100

src/SignalR/clients/cpp/src/signalrclient/hub_connection.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88

99
namespace signalr
1010
{
11-
hub_connection::hub_connection(const utility::string_t& url, const utility::string_t& query_string,
11+
hub_connection::hub_connection(const utility::string_t& url,
1212
trace_level trace_level, std::shared_ptr<log_writer> log_writer)
13-
: m_pImpl(hub_connection_impl::create(url, query_string, trace_level, std::move(log_writer)))
13+
: m_pImpl(hub_connection_impl::create(url, trace_level, std::move(log_writer)))
1414
{}
1515

1616
// Do NOT remove this destructor. Letting the compiler generate and inline the default dtor may lead to

src/SignalR/clients/cpp/src/signalrclient/hub_connection_impl.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,29 @@ namespace signalr
2020
const std::function<void(const std::exception_ptr e)>& set_exception);
2121
}
2222

23-
std::shared_ptr<hub_connection_impl> hub_connection_impl::create(const utility::string_t& url, const utility::string_t& query_string,
24-
trace_level trace_level, const std::shared_ptr<log_writer>& log_writer)
23+
std::shared_ptr<hub_connection_impl> hub_connection_impl::create(const utility::string_t& url, trace_level trace_level,
24+
const std::shared_ptr<log_writer>& log_writer)
2525
{
26-
return hub_connection_impl::create(url, query_string, trace_level, log_writer,
26+
return hub_connection_impl::create(url, trace_level, log_writer,
2727
std::make_unique<web_request_factory>(), std::make_unique<transport_factory>());
2828
}
2929

30-
std::shared_ptr<hub_connection_impl> hub_connection_impl::create(const utility::string_t& url, const utility::string_t& query_string,
31-
trace_level trace_level, const std::shared_ptr<log_writer>& log_writer, std::unique_ptr<web_request_factory> web_request_factory,
30+
std::shared_ptr<hub_connection_impl> hub_connection_impl::create(const utility::string_t& url, trace_level trace_level,
31+
const std::shared_ptr<log_writer>& log_writer, std::unique_ptr<web_request_factory> web_request_factory,
3232
std::unique_ptr<transport_factory> transport_factory)
3333
{
34-
auto connection = std::shared_ptr<hub_connection_impl>(new hub_connection_impl(url, query_string, trace_level,
34+
auto connection = std::shared_ptr<hub_connection_impl>(new hub_connection_impl(url, trace_level,
3535
log_writer ? log_writer : std::make_shared<trace_log_writer>(), std::move(web_request_factory), std::move(transport_factory)));
3636

3737
connection->initialize();
3838

3939
return connection;
4040
}
4141

42-
hub_connection_impl::hub_connection_impl(const utility::string_t& url, const utility::string_t& query_string, trace_level trace_level,
42+
hub_connection_impl::hub_connection_impl(const utility::string_t& url, trace_level trace_level,
4343
const std::shared_ptr<log_writer>& log_writer, std::unique_ptr<web_request_factory> web_request_factory,
4444
std::unique_ptr<transport_factory> transport_factory)
45-
: m_connection(connection_impl::create(url, query_string, trace_level, log_writer,
45+
: m_connection(connection_impl::create(url, trace_level, log_writer,
4646
std::move(web_request_factory), std::move(transport_factory))),m_logger(log_writer, trace_level),
4747
m_callback_manager(json::value::parse(_XPLATSTR("{ \"error\" : \"connection went out of scope before invocation result was received\"}"))),
4848
m_disconnected([]() noexcept {}), m_handshakeReceived(false)

src/SignalR/clients/cpp/src/signalrclient/hub_connection_impl.h

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ namespace signalr
2121
class hub_connection_impl : public std::enable_shared_from_this<hub_connection_impl>
2222
{
2323
public:
24-
static std::shared_ptr<hub_connection_impl> create(const utility::string_t& url, const utility::string_t& query_string,
25-
trace_level trace_level, const std::shared_ptr<log_writer>& log_writer);
24+
static std::shared_ptr<hub_connection_impl> create(const utility::string_t& url, trace_level trace_level,
25+
const std::shared_ptr<log_writer>& log_writer);
2626

27-
static std::shared_ptr<hub_connection_impl> create(const utility::string_t& url, const utility::string_t& query_string,
28-
trace_level trace_level, const std::shared_ptr<log_writer>& log_writer,
29-
std::unique_ptr<web_request_factory> web_request_factory, std::unique_ptr<transport_factory> transport_factory);
27+
static std::shared_ptr<hub_connection_impl> create(const utility::string_t& url, trace_level trace_level,
28+
const std::shared_ptr<log_writer>& log_writer, std::unique_ptr<web_request_factory> web_request_factory,
29+
std::unique_ptr<transport_factory> transport_factory);
3030

3131
hub_connection_impl(const hub_connection_impl&) = delete;
3232
hub_connection_impl& operator=(const hub_connection_impl&) = delete;
@@ -46,9 +46,8 @@ namespace signalr
4646
void set_disconnected(const std::function<void()>& disconnected);
4747

4848
private:
49-
hub_connection_impl(const utility::string_t& url, const utility::string_t& query_string, trace_level trace_level,
50-
const std::shared_ptr<log_writer>& log_writer, std::unique_ptr<web_request_factory> web_request_factory,
51-
std::unique_ptr<transport_factory> transport_factory);
49+
hub_connection_impl(const utility::string_t& url, trace_level trace_level, const std::shared_ptr<log_writer>& log_writer,
50+
std::unique_ptr<web_request_factory> web_request_factory, std::unique_ptr<transport_factory> transport_factory);
5251

5352
std::shared_ptr<connection_impl> m_connection;
5453
logger m_logger;

src/SignalR/clients/cpp/src/signalrclient/request_sender.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ namespace signalr
1212
namespace request_sender
1313
{
1414
pplx::task<negotiation_response> negotiate(web_request_factory& request_factory, const web::uri& base_url,
15-
const utility::string_t& query_string, const signalr_client_config& signalr_client_config)
15+
const signalr_client_config& signalr_client_config)
1616
{
17-
auto negotiate_url = url_builder::build_negotiate(base_url, query_string);
17+
auto negotiate_url = url_builder::build_negotiate(base_url);
1818

1919
return http_sender::post(request_factory, negotiate_url, signalr_client_config)
2020
.then([](utility::string_t body)
@@ -60,6 +60,11 @@ namespace signalr
6060
}
6161
}
6262

63+
if (negotiation_response_json.has_field(_XPLATSTR("ProtocolVersion")))
64+
{
65+
throw signalr_exception(_XPLATSTR("Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details."));
66+
}
67+
6368
return std::move(response);
6469
});
6570
}

src/SignalR/clients/cpp/src/signalrclient/request_sender.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ namespace signalr
1515
namespace request_sender
1616
{
1717
pplx::task<negotiation_response> negotiate(web_request_factory& request_factory, const web::uri &base_url,
18-
const utility::string_t& query_string, const signalr_client_config& signalr_client_config = signalr::signalr_client_config{});
18+
const signalr_client_config& signalr_client_config = signalr::signalr_client_config{});
1919
}
20-
}
20+
}

src/SignalR/clients/cpp/src/signalrclient/url_builder.cpp

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -76,33 +76,22 @@ namespace signalr
7676
return builder;
7777
}
7878

79-
web::uri_builder build_uri(const web::uri& base_url, const utility::string_t& command, transport_type transport,
80-
const utility::string_t& connection_data, const utility::string_t& query_string,
81-
const utility::string_t& last_message_id = _XPLATSTR(""), const utility::string_t& groups_token = _XPLATSTR(""))
79+
web::uri_builder build_uri(const web::uri& base_url, const utility::string_t& command, const utility::string_t& query_string)
8280
{
83-
_ASSERTE(last_message_id.length() == 0 && groups_token.length() == 0);
84-
8581
web::uri_builder builder(base_url);
8682
builder.append_path(command);
87-
append_transport(builder, transport);
88-
builder.append_query(_XPLATSTR("clientProtocol"), PROTOCOL);
89-
//append_connection_token(builder, connection_token);
90-
append_connection_data(builder, connection_data);
91-
append_message_id(builder, last_message_id);
92-
append_groups_token(builder, groups_token);
9383
return builder.append_query(query_string);
9484
}
9585

96-
web::uri_builder build_uri(const web::uri& base_url, const utility::string_t& command, const utility::string_t& query_string)
86+
web::uri_builder build_uri(const web::uri& base_url, const utility::string_t& command)
9787
{
9888
web::uri_builder builder(base_url);
99-
builder.append_path(command);
100-
return builder.append_query(query_string);
89+
return builder.append_path(command);
10190
}
10291

103-
web::uri build_negotiate(const web::uri& base_url, const utility::string_t& query_string)
92+
web::uri build_negotiate(const web::uri& base_url)
10493
{
105-
return build_uri(base_url, _XPLATSTR("negotiate"), query_string).to_uri();
94+
return build_uri(base_url, _XPLATSTR("negotiate")).to_uri();
10695
}
10796

10897
web::uri build_connect(const web::uri& base_url, transport_type transport, const utility::string_t& query_string)
@@ -117,11 +106,5 @@ namespace signalr
117106
{
118107
return build_uri(base_url, _XPLATSTR(""), query_string).to_uri();
119108
}
120-
121-
web::uri build_abort(const web::uri &base_url, transport_type transport,
122-
const utility::string_t& connection_data, const utility::string_t &query_string)
123-
{
124-
return build_uri(base_url, _XPLATSTR("abort"), transport, connection_data, query_string).to_uri();
125-
}
126109
}
127110
}

0 commit comments

Comments
 (0)