mirror of
https://github.com/AudebertAdrien/ft_transcendence.git
synced 2025-12-16 05:57:48 +01:00
Player register ok
This commit is contained in:
parent
ea24accbc4
commit
e8f46e211c
4
makefile
4
makefile
@ -9,7 +9,7 @@ ELK_COMPOSE=docker compose -f $(ELK_COMPOSE_FILE) -p $(ELK_PROJECT_NAME)
|
||||
|
||||
CONTAINER=$(c)
|
||||
|
||||
up:
|
||||
up: down
|
||||
$(COMPOSE) build
|
||||
$(COMPOSE) up -d $(CONTAINER) || true
|
||||
|
||||
@ -22,6 +22,8 @@ down:
|
||||
destroy:
|
||||
$(COMPOSE) down -v --rmi all
|
||||
|
||||
re : down destroy up
|
||||
|
||||
# Manage ELK stack
|
||||
|
||||
elk-up:
|
||||
|
||||
@ -4,10 +4,13 @@ import json
|
||||
import asyncio
|
||||
import random
|
||||
from datetime import datetime
|
||||
from .utils import handle_game_data, getlen
|
||||
from .utils import handle_game_data, getlen, create_player, create_match
|
||||
from asgiref.sync import sync_to_async
|
||||
from .models import Tournoi
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
|
||||
executor = ThreadPoolExecutor(max_workers=5)
|
||||
lock = asyncio.Lock()
|
||||
class Game:
|
||||
# Global variable to handle the using of the database
|
||||
USING_DB = False
|
||||
@ -58,6 +61,7 @@ class Game:
|
||||
print(f"- Game #{self.game_id} STARTED ({self.game_state['player1_name']} vs {self.game_state['player2_name']}) --- ({self})")
|
||||
self.game_loop_task = asyncio.create_task(self.game_loop())
|
||||
print(f" Begin MATCH at: {self.start_time}")
|
||||
await sync_to_async(create_player)(self.game_state['player1_name'], self.game_state['player2_name'])
|
||||
|
||||
async def game_loop(self):
|
||||
print(" In the game loop..")
|
||||
@ -250,52 +254,22 @@ class Game:
|
||||
if not self.localgame:
|
||||
await self.player2.send(end_message)
|
||||
|
||||
|
||||
|
||||
attempt = 0
|
||||
max_attempts = 10 # Limite le nombre de tentatives
|
||||
success = False
|
||||
|
||||
print(f"Try to save game #{self.game_id} ({self})")
|
||||
#while attempt < max_attempts and not success:
|
||||
try:
|
||||
if hasattr(self, 'tournament'):
|
||||
print(f"*** Game #{self.game_id} from tournament: {self.tournament.tournoi_reg.name} ENDED ***")
|
||||
|
||||
# Essaye d'appeler handle_game_data
|
||||
result = await sync_to_async(handle_game_data)(
|
||||
self.game_state['player1_name'], self.game_state['player2_name'],
|
||||
self.game_state['player1_score'], self.game_state['player2_score'],
|
||||
self.bt1, self.bt2, duration, True, self.tournament.tournoi_reg
|
||||
)
|
||||
|
||||
# Vérification explicite de la réussite
|
||||
if result is not None: # Si handle_game_data peut retourner un résultat indicatif
|
||||
success = True
|
||||
print(f"*** Game #{self.game_id} from tournament: {self.tournament.tournoi_reg.name} is REGISTERED ***")
|
||||
else:
|
||||
raise ValueError("handle_game_data returned an unexpected result")
|
||||
|
||||
|
||||
else:
|
||||
print(f"*** Game #{self.game_id} simple game ENDED ***")
|
||||
result = await sync_to_async(handle_game_data)(
|
||||
self.game_state['player1_name'], self.game_state['player2_name'],
|
||||
self.game_state['player1_score'], self.game_state['player2_score'],
|
||||
self.bt1, self.bt2, duration, False, None
|
||||
)
|
||||
print("result done !!!")
|
||||
avd, d = (True, self.tournament.tournoi_reg) if hasattr(self, 'tournament') else (False, None)
|
||||
|
||||
if result is not None:
|
||||
success = True
|
||||
print(f"Non-tournament game {self.game_id} data registered")
|
||||
else:
|
||||
raise ValueError("handle_game_data returned an unexpected result")
|
||||
|
||||
# Essaye d'appeler handle_game_data
|
||||
print("TRY CREATE MATCH")
|
||||
|
||||
except Exception as e:
|
||||
attempt += 1
|
||||
print(f"Attempt {attempt}: Failed to register game data - {e}")
|
||||
await asyncio.sleep(1) # Délai avant de réessayer
|
||||
await sync_to_async(create_match)(
|
||||
self.game_state['player1_name'], self.game_state['player2_name'],
|
||||
self.game_state['player1_score'], self.game_state['player2_score'],
|
||||
self.bt1, self.bt2, duration, avd, d
|
||||
)
|
||||
|
||||
if attempt >= max_attempts:
|
||||
print("Max attempts reached. Could not register game data.")
|
||||
#break
|
||||
print("MATCH OK")
|
||||
|
||||
|
||||
@ -0,0 +1,28 @@
|
||||
# Generated by Django 5.1.1 on 2024-09-14 09:10
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('game', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='match',
|
||||
name='player1',
|
||||
field=models.CharField(max_length=100),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='match',
|
||||
name='player2',
|
||||
field=models.CharField(max_length=100),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='match',
|
||||
name='winner',
|
||||
field=models.CharField(max_length=100),
|
||||
),
|
||||
]
|
||||
@ -26,11 +26,11 @@ class Tournoi(models.Model):
|
||||
return self.name
|
||||
|
||||
class Match(models.Model):
|
||||
player1 = models.ForeignKey('Player', related_name='match_as_player1', on_delete=models.CASCADE)
|
||||
player2 = models.ForeignKey('Player', related_name='match_as_player2', on_delete=models.CASCADE)
|
||||
player1 = models.CharField(max_length=100)
|
||||
player2 = models.CharField(max_length=100)
|
||||
score_player1 = models.PositiveSmallIntegerField()
|
||||
score_player2 = models.PositiveSmallIntegerField()
|
||||
winner = models.ForeignKey('Player', related_name='won_matches',on_delete=models.CASCADE, null=True)
|
||||
winner = models.CharField(max_length=100)
|
||||
nbr_ball_touch_p1 = models.PositiveIntegerField()
|
||||
nbr_ball_touch_p2 = models.PositiveIntegerField()
|
||||
duration = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)
|
||||
|
||||
@ -110,8 +110,7 @@ class TournamentMatchMaker:
|
||||
await asyncio.sleep(1) # Wait for 1 second before checking again
|
||||
# Get winners for the next round
|
||||
players = self.get_round_winners()
|
||||
print(f"Round {self.current_round} finished. {len(players)} players advancing.")
|
||||
await asyncio.sleep(10)
|
||||
print(f"Round {self.current_round} finished. {len(players)} players advancing.")
|
||||
# Tournament has ended
|
||||
await self.update_brackets()
|
||||
await self.end_tournament(players[0] if players else None)
|
||||
|
||||
@ -2,53 +2,71 @@ from .models import Player, Tournoi, Match
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.db.models import Max, Sum, F
|
||||
from datetime import timedelta
|
||||
from channels.db import database_sync_to_async
|
||||
|
||||
from asgiref.sync import sync_to_async
|
||||
from django.db.models import Q
|
||||
import asyncio
|
||||
|
||||
players_name_list = []
|
||||
|
||||
def handle_game_data(p1, p2, s_p1, s_p2, bt_p1, bt_2, dur, is_tournoi, name_tournament):
|
||||
try:
|
||||
print("Here !!!!!!!!")
|
||||
player_1 = get_or_create_player(p1)
|
||||
print("FIRST PLAYER REGISTERD")
|
||||
player_2 = get_or_create_player(p2)
|
||||
print("SECOND PLAYER REGISTERD")
|
||||
#get_or_create_player(p1, p2)
|
||||
#print("FIRST PLAYER REGISTERD")
|
||||
#await sync_to_async(get_or_create_player)(p2)
|
||||
#print("SECOND PLAYER REGISTERD")
|
||||
|
||||
|
||||
if (not player_1 or not player_2) :
|
||||
print("AIIEJJDFKJBDBKJJKB PROBLEME ORIOL ")
|
||||
print("CHAKU & THEOUCHE are the BEST")
|
||||
create_match(player_1, player_2, s_p1, s_p2, bt_p1, bt_2, dur, is_tournoi, name_tournament)
|
||||
create_match(p1, p2, s_p1, s_p2, bt_p1, bt_2, dur, is_tournoi, name_tournament)
|
||||
print("and ADRIANO is the PEST")
|
||||
|
||||
update_player_statistics(p1)
|
||||
#update_player_statistics(p1)
|
||||
print("END UPDATE FISRT PLAYER")
|
||||
update_player_statistics(p2)
|
||||
#update_player_statistics(p2)
|
||||
print("END UPDATE SECOND PLAYER")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error in endfortheouche: {e}")
|
||||
|
||||
|
||||
def get_or_create_player(name):
|
||||
def create_player(name_p1, name_p2):
|
||||
print("Get or create player")
|
||||
global players_name_list
|
||||
|
||||
# Utilise get_or_create pour chercher un joueur existant ou en créer un nouveau avec les valeurs par défaut
|
||||
player, created = Player.objects.get_or_create(
|
||||
name=name,
|
||||
defaults={
|
||||
'total_match': 0,
|
||||
'total_win': 0,
|
||||
'p_win': None,
|
||||
'num_participated_tournaments': 0,
|
||||
'num_won_tournaments': 0
|
||||
}
|
||||
)
|
||||
if created:
|
||||
print("Player created")
|
||||
else:
|
||||
print("Player exists")
|
||||
return player
|
||||
print("Check player exist")
|
||||
if name_p1 in players_name_list:
|
||||
print(f"Player 1 {name_p1} exists")
|
||||
else :
|
||||
print(f"Player 1 {name_p1} does not exists")
|
||||
player1 = Player(
|
||||
name = name_p1,
|
||||
total_match = 0,
|
||||
total_win = 0,
|
||||
p_win = 0,
|
||||
num_participated_tournaments = 0,
|
||||
num_won_tournaments = 0)
|
||||
player1.save()
|
||||
players_name_list.append(name_p1)
|
||||
print(f"Player {name_p1} creation done")
|
||||
|
||||
if name_p2 in players_name_list:
|
||||
print(f"Player 2 {name_p2} exists")
|
||||
else :
|
||||
print(f"Player 2 {name_p2} does not exists")
|
||||
player2 = Player(
|
||||
name = name_p2,
|
||||
total_match = 0,
|
||||
total_win = 0,
|
||||
p_win = 0,
|
||||
num_participated_tournaments = 0,
|
||||
num_won_tournaments = 0)
|
||||
player2.save()
|
||||
players_name_list.append(name_p2)
|
||||
print(f"Player {name_p2} creation done")
|
||||
|
||||
#return player
|
||||
|
||||
|
||||
|
||||
@ -58,6 +76,7 @@ def create_tournoi(name, nbr_player, date, winner):
|
||||
return tournoi
|
||||
|
||||
def create_match(player1, player2, score_player1, score_player2, nbr_ball_touch_p1, nbr_ball_touch_p2, duration, is_tournoi, tournoi):
|
||||
print("MATCH BEING REGISTERD")
|
||||
match = Match(
|
||||
player1=player1,
|
||||
player2=player2,
|
||||
@ -76,9 +95,14 @@ def create_match(player1, player2, score_player1, score_player2, nbr_ball_touch_
|
||||
match.winner = match.player2
|
||||
else:
|
||||
match.winner = None
|
||||
|
||||
|
||||
print("MATCH SAVE IN DB")
|
||||
match.save()
|
||||
return match
|
||||
print("MATCH DONE")
|
||||
#update_player_statistics(player1)
|
||||
#update_player_statistics(player2)
|
||||
#print("STAT DONE")
|
||||
|
||||
def update_player_statistics(player_name):
|
||||
print("UPDATED DATA")
|
||||
|
||||
@ -71,8 +71,8 @@ def match_list_json(request):
|
||||
matches = Match.objects.all()
|
||||
data = {
|
||||
'matches': list(matches.values(
|
||||
'id', 'player1__name', 'player2__name', 'score_player1', 'score_player2',
|
||||
'winner__name', 'nbr_ball_touch_p1', 'nbr_ball_touch_p2', 'duration', 'date',
|
||||
'id', 'player1', 'player2', 'score_player1', 'score_player2',
|
||||
'winner', 'nbr_ball_touch_p1', 'nbr_ball_touch_p2', 'duration', 'date',
|
||||
'is_tournoi', 'tournoi__name'
|
||||
))
|
||||
}
|
||||
|
||||
@ -109,11 +109,11 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
const row = document.createElement('tr');
|
||||
row.innerHTML = `
|
||||
<td>${match.id}</td>
|
||||
<td>${match.player1__name}</td>
|
||||
<td>${match.player2__name}</td>
|
||||
<td>${match.player1}</td>
|
||||
<td>${match.player2}</td>
|
||||
<td>${match.score_player1}</td>
|
||||
<td>${match.score_player2}</td>
|
||||
<td>${match.winner__name}</td>
|
||||
<td>${match.winner}</td>
|
||||
<td>${match.nbr_ball_touch_p1}</td>
|
||||
<td>${match.nbr_ball_touch_p2}</td>
|
||||
<td>${match.duration}</td>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user