joinRoom method
Implementation
SwampRoom? joinRoom(Uint8List roomId, Channel player) {
final room = getRoom(roomId);
if (room == null) {
_sendJoinFailed(player, JoinFailedReason.roomNotFound);
return null;
}
final application = _application[player];
if (application != null &&
room.application != null &&
encodeRoomCode(room.application!) != encodeRoomCode(application)) {
_sendJoinFailed(player, JoinFailedReason.roomFull);
return null;
}
if (room.players.length >= config.maxPlayers) {
_sendJoinFailed(player, JoinFailedReason.roomFull);
return null;
}
final id = room._findAvailableChannel();
if (id == kAnyChannel) {
_sendJoinFailed(player, JoinFailedReason.roomFull);
return null;
}
_joined[player] = room;
room._playerChannels[player] = id;
sendRoomInfo(player);
_sendPacketToRoom(
room,
RpcNetworkerPacket.named(
name: SwampEvent.playerJoined,
data: Uint8List.fromList([id >> 8, id & 0xFF]),
),
);
return room;
}