Skip to content

Commit

Permalink
Fix swiss tournament
Browse files Browse the repository at this point in the history
  • Loading branch information
vtm9 committed Mar 1, 2025
1 parent cc33243 commit 870d3f5
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,7 @@ const getTournamentPresentationStatus = state => {
};

function InfoPanel({
currentUserId,
tournament,
playersCount,
hideResults,
canModerate,
currentUserId, tournament, hideResults, canModerate,
}) {
if (
tournament.state === TournamentStates.waitingParticipants
Expand All @@ -64,7 +60,7 @@ function InfoPanel({
<IndividualMatches
matches={tournament.matches}
players={tournament.players}
playersCount={playersCount}
playersCount={tournament.playersCount}
currentUserId={currentUserId}
/>
);
Expand Down Expand Up @@ -142,18 +138,16 @@ function Tournament({ waitingRoomMachine }) {
] = useState(false);
const [matchConfirmationModalShowing, setMatchConfirmationModalShowing] = useState(false);

const playersCount = useMemo(
() => Object.values(tournament.players).filter(player => (tournament.showBots ? true : !player.isBot)).length,
[tournament.players, tournament.showBots],
);
const isOver = useMemo(
() => [TournamentStates.finished, TournamentStates.cancelled].includes(
tournament.state,
),
[tournament.state],
);
const canModerate = useMemo(() => isOwner || isAdmin, [isOwner, isAdmin]);
const hiddenSidePanel = (tournament.type === 'arena' && tournament.state !== 'waiting_participants') || streamMode;
const hiddenSidePanel = (tournament.type === 'arena'
&& tournament.state !== 'waiting_participants')
|| streamMode;

const panelClassName = cn('mb-2', {
'container-fluid': !streamMode,
Expand All @@ -180,10 +174,16 @@ function Tournament({ waitingRoomMachine }) {
]);

useEffect(() => {
const tournamentChannel = connectToTournament(waitingRoomService, tournament?.id)(dispatch);
const tournamentChannel = connectToTournament(
waitingRoomService,
tournament?.id,
)(dispatch);

if (canModerate) {
const tournamentAdminChannel = connectToTournamentAdmin(waitingRoomService, tournament?.id)(dispatch);
const tournamentAdminChannel = connectToTournamentAdmin(
waitingRoomService,
tournament?.id,
)(dispatch);

return () => {
tournamentChannel.leave();
Expand Down Expand Up @@ -336,7 +336,7 @@ function Tournament({ waitingRoomMachine }) {
roundTimeoutSeconds={tournament.roundTimeoutSeconds}
name={tournament.name}
players={tournament.players}
playersCount={playersCount}
playersCount={tournament.playersCount}
playersLimit={tournament.playersLimit}
showBots={tournament.showBots}
hideResults={hideResults}
Expand All @@ -359,7 +359,7 @@ function Tournament({ waitingRoomMachine }) {
<div className="bg-white h-100 shadow-sm rounded-lg p-3 overflow-auto">
<InfoPanel
tournament={tournament}
playersCount={playersCount}
playersCount={tournament.playersCount}
currentUserId={currentUserId}
hideResults={hideResults}
canModerate={canModerate}
Expand All @@ -369,13 +369,15 @@ function Tournament({ waitingRoomMachine }) {
<div className="d-flex flex-column flex-lg-column-reverse col-12 col-lg-3 h-100">
{!tournament.useClan && !hiddenSidePanel && (
<Players
playersCount={playersCount}
playersCount={tournament.playersCount}
players={tournament.players}
showBots={tournament.showBots}
/>
)}
{tournament.useChat && !hiddenSidePanel && <TournamentChat />}
{tournament.useClan && !hiddenSidePanel && <TournamentClanTable />}
{tournament.useClan && !hiddenSidePanel && (
<TournamentClanTable />
)}
</div>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,7 @@ const getTournamentPresentationStatus = state => {
}
};

function InfoPanel({
currentUserId, tournament, playersCount, hideResults,
}) {
function InfoPanel({ currentUserId, tournament, hideResults }) {
if (
tournament.state === TournamentStates.waitingParticipants
&& tournament.type !== 'team'
Expand All @@ -56,7 +54,7 @@ function InfoPanel({
<IndividualMatches
matches={tournament.matches}
players={tournament.players}
playersCount={playersCount}
playersCount={tournament.playersCount}
currentUserId={currentUserId}
/>
);
Expand Down Expand Up @@ -122,10 +120,6 @@ function TournamentAdminWidget({ waitingRoomMachine }) {
] = useState(false);
const [matchConfirmationModalShowing, setMatchConfirmationModalShowing] = useState(false);

const playersCount = useMemo(
() => Object.values(tournament.players).filter(player => (tournament.showBots ? true : !player.isBot)).length,
[tournament.players, tournament.showBots],
);
const isOver = useMemo(
() => [TournamentStates.finished, TournamentStates.cancelled].includes(
tournament.state,
Expand Down Expand Up @@ -159,7 +153,10 @@ function TournamentAdminWidget({ waitingRoomMachine }) {
]);

useEffect(() => {
const channel = connectToTournament(waitingRoomService, tournament.id)(dispatch);
const channel = connectToTournament(
waitingRoomService,
tournament.id,
)(dispatch);

return () => {
channel.leave();
Expand Down Expand Up @@ -289,7 +286,7 @@ function TournamentAdminWidget({ waitingRoomMachine }) {
roundTimeoutSeconds={tournament.roundTimeoutSeconds}
name={tournament.name}
players={tournament.players}
playersCount={playersCount}
playersCount={tournament.playersCount}
playersLimit={tournament.playersLimit}
showBots={tournament.showBots}
hideResults={hideResults}
Expand All @@ -307,7 +304,7 @@ function TournamentAdminWidget({ waitingRoomMachine }) {
<div className="bg-white h-100 shadow-sm rounded-lg p-3 overflow-auto">
<InfoPanel
tournament={tournament}
playersCount={playersCount}
playersCount={tournament.playersCount}
currentUserId={currentUserId}
hideResults={hideResults}
canModerate
Expand All @@ -316,7 +313,7 @@ function TournamentAdminWidget({ waitingRoomMachine }) {
</div>
<div className={sidePanelClassName}>
<Players
playersCount={playersCount}
playersCount={tournament.playersCount}
players={tournament.players}
showBots={tournament.showBots}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -788,7 +788,7 @@ defmodule Codebattle.Tournament.Base do
|> db_save!(:with_ets)
|> broadcast_tournament_finished()
|> then(fn tournament ->
Process.send_after(self(), :terminate, to_timeout(minute: 15))
Process.send_after(self(), :terminate, to_timeout(minute: 30))

tournament
end)
Expand Down Expand Up @@ -846,6 +846,8 @@ defmodule Codebattle.Tournament.Base do
end

defp maybe_start_round_timer(%{round_timeout_seconds: nil} = tournament), do: tournament
# We don't want to run a timer for the swiss type, because all games already have a timeout
defp maybe_start_round_timer(%{staus: "active", type: "swiss"} = tournament), do: tournament

defp maybe_start_round_timer(tournament) do
Process.send_after(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -212,9 +212,16 @@ defmodule CodebattleWeb.TournamentChannel do
defp get_tournament_join_payload(tournament, nil) do
ranking = Tournament.Ranking.get_page(tournament, 1)

players =
if tournament.players_count > 256 do
[]
else
Helpers.get_players(tournament)
end

%{
matches: [],
players: [],
players: players,
ranking: ranking,
clans: Helpers.get_clans_by_ranking(tournament, ranking),
current_player: nil,
Expand All @@ -224,7 +231,7 @@ defmodule CodebattleWeb.TournamentChannel do

defp get_tournament_join_payload(tournament, current_player) do
player_data =
if tournament.players_count > 128 do
if tournament.players_count > 256 do
player_matches = Helpers.get_matches_by_players(tournament, [current_player.id])

opponents =
Expand Down

0 comments on commit 870d3f5

Please sign in to comment.