From d18790f494e452270b66bfc7477cbaf187ae7628 Mon Sep 17 00:00:00 2001 From: TomasGalian Date: Tue, 27 Jun 2023 19:25:16 -0300 Subject: [PATCH] Fix: se pueden unir varios jugadores a un mismo server despues de finalizar --- src/server/player_receiver.cpp | 9 ++++++--- src/server/player_receiver.h | 5 ++++- src/server/player_sender.cpp | 5 ++++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/server/player_receiver.cpp b/src/server/player_receiver.cpp index 11de667..6d796ea 100644 --- a/src/server/player_receiver.cpp +++ b/src/server/player_receiver.cpp @@ -8,9 +8,10 @@ #include PlayerReceiver::PlayerReceiver(Socket *socket, std::atomic &stay_in_match, - std::atomic &keep_playing, int32_t& player_id) - : player_id(player_id), stay_in_match(stay_in_match), keep_playing(keep_playing), - server_deserializer(socket) { + std::atomic &keep_playing, int32_t& player_id, + Queue &queue_sender) : queue_sender(queue_sender), + player_id(player_id), stay_in_match(stay_in_match), keep_playing(keep_playing), + server_deserializer(socket) { queue_receiver = nullptr; //Comienza en nullptr. El player_sender le va a setear la queue } @@ -32,7 +33,9 @@ void PlayerReceiver::run() { break; } } + keep_playing = false; stay_in_match = false; + queue_sender.close(); } void PlayerReceiver::setQueueReceiver(Queue *queue_receiver){ diff --git a/src/server/player_receiver.h b/src/server/player_receiver.h index d2f519b..2c1ba63 100644 --- a/src/server/player_receiver.h +++ b/src/server/player_receiver.h @@ -22,12 +22,15 @@ class PlayerReceiver : public Thread{ std::atomic& keep_playing; ServerDeserializer server_deserializer; + + Queue &queue_sender; int32_t player_id; public: PlayerReceiver(Socket *socket, std::atomic &stay_in_match, - std::atomic &keep_playing, int32_t& player_id); + std::atomic &keep_playing, int32_t& player_id, + Queue &queue_sender); void run() override; diff --git a/src/server/player_sender.cpp b/src/server/player_sender.cpp index 309175f..1f7f618 100644 --- a/src/server/player_sender.cpp +++ b/src/server/player_sender.cpp @@ -7,7 +7,7 @@ PlayerSender::PlayerSender(Socket *socket, std::atomic &stay_in_match, std::atomic &keep_playing, MatchMananger *match_mananger, int32_t& player_id) : stay_in_match(stay_in_match), keep_playing(keep_playing), queue_sender(10000), - player_receiver(socket,stay_in_match, keep_playing, player_id),match_mananger(match_mananger), + player_receiver(socket,stay_in_match, keep_playing, player_id,queue_sender),match_mananger(match_mananger), server_deserializer(socket), server_serializer(socket), player_id(player_id) { queue_receiver = nullptr; //Al inicio es un nullptr ya que no tiene ninguna partida asociada. stay_in_match = true; @@ -31,10 +31,13 @@ void PlayerSender::run() { std::cout<<"Se cerro la cola correctamente"<delete_player(player_id); //Elimino al jugador de la partida en la que estaba } + std::cout<<"Salgo"<