Skip to content

Commit 6cec10c

Browse files
committed
Add custom scheme
1 parent 90aee14 commit 6cec10c

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

api/lib/connection.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import 'package:web_socket_channel/web_socket_channel.dart';
1313
part 'info.dart';
1414

1515
const kDefaultSwampSplit = ':';
16+
const kSwampSchemePrefix = 'swamp+';
1617

1718
class 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(

server/lib/room.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,14 +212,15 @@ final class SwampRoomManager extends SimpleNetworkerPipe<RpcNetworkerPacket> {
212212
SwampRoom room,
213213
RpcNetworkerPacket packet, [
214214
Channel receiver = kAnyChannel,
215+
Channel sender = kAnyChannel,
215216
]) {
216-
final receivers = <Channel>[];
217+
List<Channel> receivers;
217218
if (receiver == kAnyChannel) {
218-
receivers.addAll(room._playerChannels.keys);
219+
receivers = room._playerChannels.keys.where((c) => c != sender).toList();
219220
} else {
220221
final channel = room.getPlayer(receiver);
221222
if (channel == null) return;
222-
receivers.add(channel);
223+
receivers = [channel];
223224
}
224225
for (final receiver in receivers) {
225226
sendMessage(packet, receiver);
@@ -240,7 +241,7 @@ final class SwampRoomManager extends SimpleNetworkerPipe<RpcNetworkerPacket> {
240241
name: SwampEvent.message,
241242
data: bytes,
242243
);
243-
_sendPacketToRoom(room, packet, receiver);
244+
_sendPacketToRoom(room, packet, receiver, sender);
244245
}
245246

246247
void setApplication(Channel channel, Uint8List? data) {

0 commit comments

Comments
 (0)