joinRoom method

SwampRoom? joinRoom(
  1. Uint8List roomId,
  2. Channel player
)

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;
}