From cddc5f8a75b48f08b33e2b9cbf3d5005b573ac1b Mon Sep 17 00:00:00 2001 From: Pawel Kadluczka Date: Mon, 21 Aug 2017 14:38:37 -0700 Subject: [PATCH] Adapting TS-client to work with non-level-2 xhr --- .../HttpClient.ts | 2 +- .../Transports.ts | 16 +++++++++++++--- .../index.ts | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/HttpClient.ts b/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/HttpClient.ts index 9650fe7d28..08c3747c2a 100644 --- a/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/HttpClient.ts +++ b/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/HttpClient.ts @@ -33,7 +33,7 @@ export class HttpClient implements IHttpClient { xhr.send(content); xhr.onload = () => { if (xhr.status >= 200 && xhr.status < 300) { - resolve(xhr.response); + resolve(xhr.response || xhr.responseText); } else { reject(new HttpError(xhr.statusText, xhr.status)); diff --git a/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/Transports.ts b/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/Transports.ts index 25c89be3c4..477d080252 100644 --- a/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/Transports.ts +++ b/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/Transports.ts @@ -179,6 +179,12 @@ export class LongPollingTransport implements ITransport { connect(url: string, requestedTransferMode: TransferMode): Promise { this.url = url; this.shouldPoll = true; + + if (requestedTransferMode === TransferMode.Binary && (typeof new XMLHttpRequest().responseType !== "string")) { + // This will work if we fix: https://github.com/aspnet/SignalR/issues/742 + throw new Error("Binary protocols over XmlHttpRequest not implementing advanced features are not supported."); + } + this.poll(this.url, requestedTransferMode); return Promise.resolve(requestedTransferMode); } @@ -197,9 +203,13 @@ export class LongPollingTransport implements ITransport { if (pollXhr.status == 200) { if (this.onDataReceived) { try { - if (pollXhr.response) { - this.logger.log(LogLevel.Information, `(LongPolling transport) data received: ${pollXhr.response}`); - this.onDataReceived(pollXhr.response); + let response = transferMode === TransferMode.Text + ? pollXhr.responseText + : pollXhr.response; + + if (response) { + this.logger.log(LogLevel.Information, `(LongPolling transport) data received: ${response}`); + this.onDataReceived(response); } else { this.logger.log(LogLevel.Information, "(LongPolling transport) timed out"); diff --git a/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/index.ts b/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/index.ts index d9530f35e5..de2de2f719 100644 --- a/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/index.ts +++ b/client-ts/Microsoft.AspNetCore.SignalR.Client.TS/index.ts @@ -4,4 +4,4 @@ export * from "./HttpClient" export * from "./HubConnection" export * from "./Transports" export * from "./Loggers" - +export * from "./MessagePackHubProtocol"