@@ -13,6 +13,7 @@ import 'package:web_socket_channel/web_socket_channel.dart';
1313part 'info.dart' ;
1414
1515const kDefaultSwampSplit = ':' ;
16+ const kSwampSchemePrefix = 'swamp+' ;
1617
1718class SwampConnection extends NetworkerPipe <Uint8List , RpcNetworkerPacket >
1819 with
@@ -21,6 +22,10 @@ class SwampConnection extends NetworkerPipe<Uint8List, RpcNetworkerPacket>
2122 NetworkerServerMixin <SwampClientConnectionInfo , RpcNetworkerPacket >,
2223 NetworkerClientMixin <RpcNetworkerPacket >,
2324 NamedRpcNetworkerPipe <SwampEvent , SwampCommand > {
25+ static final List <String > supportedSchemes = List .unmodifiable (const [
26+ '${kSwampSchemePrefix }ws' ,
27+ '${kSwampSchemePrefix }wss' ,
28+ ]);
2429 final StreamController <void > _onOpen = StreamController <void >.broadcast (),
2530 _onClosed = StreamController <void >.broadcast ();
2631 final BehaviorSubject <RoomInfo > _onRoomInfo = BehaviorSubject ();
@@ -56,6 +61,7 @@ class SwampConnection extends NetworkerPipe<Uint8List, RpcNetworkerPacket>
5661 return server.replace (
5762 fragment:
5863 '${encodeRoomCode (id )}$split ${encodeRoomCode (Uint8List .fromList (key ))}' ,
64+ scheme: '$kSwampSchemePrefix ${server .scheme }' ,
5965 );
6066 }
6167
@@ -158,6 +164,13 @@ class SwampConnection extends NetworkerPipe<Uint8List, RpcNetworkerPacket>
158164 if (isOpen) {
159165 return ;
160166 }
167+ var address = this .address;
168+ final scheme = address.scheme;
169+ if (scheme.startsWith (kSwampSchemePrefix)) {
170+ address = address.replace (
171+ scheme: scheme.substring (kSwampSchemePrefix.length),
172+ );
173+ }
161174 final channel =
162175 _channel = WebSocketChannel .connect (address, protocols: ['swamp-0' ]);
163176 channel.stream.listen (
0 commit comments