Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions lib/http_connection.dart
Original file line number Diff line number Diff line change
Expand Up @@ -555,14 +555,14 @@ class HttpConnection implements IConnection {
ITransport _constructTransport(HttpTransportType transport) {
switch (transport) {
case HttpTransportType.WebSockets:
return WebSocketTransport(
_accessTokenFactory, _logger, _options.logMessageContent);
return WebSocketTransport(_accessTokenFactory, _logger,
_options.logMessageContent, _options.headers);
case HttpTransportType.ServerSentEvents:
return new ServerSentEventsTransport(_httpClient, _accessTokenFactory,
_logger, _options.logMessageContent);
case HttpTransportType.LongPolling:
return LongPollingTransport(_httpClient, _accessTokenFactory, _logger,
_options.logMessageContent);
_options.logMessageContent, _options.headers);
default:
throw new GeneralError("Unknown transport: $transport.");
}
Expand Down
9 changes: 6 additions & 3 deletions lib/long_polling_transport.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class LongPollingTransport implements ITransport {
final Logger? _logger;
final bool _logMessageContent;
final AbortController _pollAbort;
MessageHeaders? _headers;

bool? get pollAborted => _pollAbort.aborted;

Expand All @@ -36,11 +37,13 @@ class LongPollingTransport implements ITransport {
SignalRHttpClient httpClient,
AccessTokenFactory? accessTokenFactory,
Logger? logger,
bool logMessageContent)
bool logMessageContent,
MessageHeaders? headers)
: _httpClient = httpClient,
_accessTokenFactory = accessTokenFactory,
_logger = logger,
_logMessageContent = logMessageContent,
_headers = headers,
_pollAbort = AbortController() {
_running = false;
}
Expand All @@ -60,7 +63,7 @@ class LongPollingTransport implements ITransport {

final pollOptions = SignalRHttpRequest(
abortSignal: _pollAbort.signal,
headers: MessageHeaders(),
headers: _headers ?? MessageHeaders(),
timeout: 100000);

final token = await _getAccessToken();
Expand Down Expand Up @@ -159,7 +162,7 @@ class LongPollingTransport implements ITransport {
new GeneralError("Cannot send until the transport is connected"));
}
await sendMessage(_logger, "LongPolling", _httpClient, _url,
_accessTokenFactory, data, _logMessageContent);
_accessTokenFactory, data, _logMessageContent, _headers);
}

@override
Expand Down
1 change: 1 addition & 0 deletions lib/server_sent_events_transport.dart
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ class ServerSentEventsTransport implements ITransport {
_accessTokenFactory,
data,
_logMessageContent,
null,
);
}

Expand Down
9 changes: 5 additions & 4 deletions lib/utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,13 @@ Future<void> sendMessage(
String? url,
AccessTokenFactory? accessTokenFactory,
Object content,
bool logMessageContent) async {
MessageHeaders headers = MessageHeaders();
bool logMessageContent,
MessageHeaders? headers) async {
MessageHeaders _headers = headers ?? MessageHeaders();
if (accessTokenFactory != null) {
final token = await accessTokenFactory();
if (!isStringEmpty(token)) {
headers.setHeaderValue("Authorization", "Bearer $token");
_headers.setHeaderValue("Authorization", "Bearer $token");
}
}

Expand All @@ -66,7 +67,7 @@ Future<void> sendMessage(

//final responseType = content is String ? "arraybuffer" : "text";
SignalRHttpRequest req =
SignalRHttpRequest(content: content, headers: headers);
SignalRHttpRequest(content: content, headers: _headers);
final response = await httpClient.post(url, options: req);

logger?.finest(
Expand Down
10 changes: 7 additions & 3 deletions lib/web_socket_transport.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import 'package:flutter/foundation.dart';
import 'dart:io' as io;

import 'package:logging/logging.dart';
import 'package:signalr_netcore/ihub_protocol.dart';
import 'package:signalr_netcore/signalr_client.dart';
import 'package:web_socket_channel/io.dart';
import 'package:web_socket_channel/web_socket_channel.dart';

Expand All @@ -18,6 +20,7 @@ class WebSocketTransport implements ITransport {
final bool _logMessageContent;
WebSocketChannel? _webSocket;
StreamSubscription<Object?>? _webSocketListenSub;
MessageHeaders? _headers;

@override
OnClose? onClose;
Expand All @@ -27,18 +30,19 @@ class WebSocketTransport implements ITransport {

// Methods
WebSocketTransport(AccessTokenFactory? accessTokenFactory, Logger? logger,
bool logMessageContent)
bool logMessageContent, MessageHeaders? headers)
: _accessTokenFactory = accessTokenFactory,
_logger = logger,
_logMessageContent = logMessageContent;
_logMessageContent = logMessageContent,
_headers = headers;

@override
Future<void> connect(String? url, TransferFormat transferFormat) async {
assert(url != null);

_logger?.finest("(WebSockets transport) Connecting");

Map<String, dynamic> headers = {};
Map<String, String> headers = _headers?.asMap ?? {};

if (_accessTokenFactory != null) {
final token = await _accessTokenFactory!();
Expand Down