arriWebsocketRequest<TServerMessage, TClientMessage> function
Future<ArriWebsocketController<TServerMessage, TClientMessage> >
arriWebsocketRequest<TServerMessage, TClientMessage>(})
Implementation
Future<ArriWebsocketController<TServerMessage, TClientMessage>>
arriWebsocketRequest<TServerMessage, TClientMessage>(
String url, {
FutureOr<Map<String, String>> Function()? headers,
required TServerMessage Function(String msg) parser,
required String Function(TClientMessage msg) serializer,
String? clientVersion,
}) async {
var finalUrl =
url.replaceAll("http://", "ws://").replaceAll("https://", "wss://");
if (headers != null || clientVersion?.isNotEmpty == true) {
final queryParts = <String>[];
for (final entry
in (await headers?.call())?.entries ?? <MapEntry<String, String>>[]) {
queryParts.add("${entry.key}=${entry.value}");
}
if (clientVersion != null) {
queryParts.add("client-version=$clientVersion");
}
finalUrl = "$finalUrl?${queryParts.join("&")}";
}
final uri = Uri.parse(finalUrl);
final channel = WebSocketChannel.connect(uri);
await channel.ready;
return ArriWebsocketController<TServerMessage, TClientMessage>(
channel: channel,
parser: parser,
serializer: serializer,
);
}