From 5e27bb335b9da7b4c3194fc5ffc5c84b1abc227f Mon Sep 17 00:00:00 2001 From: Tomas Fabrizio Orsi Date: Thu, 26 Oct 2023 22:22:37 -0300 Subject: [PATCH 1/2] Big commit: Gran refactoreo Signed-off-by: Tomas Fabrizio Orsi --- src/common/threadSafeList.h | 4 ++-- src/server/cliente.cpp | 33 ++++++++++++++++++++++++++++----- src/server/cliente.h | 4 ++-- src/server/jugador.cpp | 6 ++++++ src/server/partida.cpp | 5 +++++ src/server/partida.h | 5 ++--- src/server/protocolo.cpp | 13 +++++++------ src/server/protocolo.h | 10 ++++++++-- src/server/server.h | 2 +- 9 files changed, 61 insertions(+), 21 deletions(-) diff --git a/src/common/threadSafeList.h b/src/common/threadSafeList.h index 03767e85..90a3058c 100644 --- a/src/common/threadSafeList.h +++ b/src/common/threadSafeList.h @@ -36,7 +36,7 @@ class TSList { // no una copia. Yo le hubiese puesto "get", pero _etimologicamente_ // get implica que vos lo obtenes (llamese, te pasan copia) y eso // no es lo que hace. - T& at(int pos) { + [[nodiscard]] T& at(int pos) { //Lockeamos porque obtener es una RC* //Entendo que es una race condition, porque si alguien esta //modificando la lista; vos podrias llegar a ver una vision @@ -58,7 +58,7 @@ class TSList { this->lista.erase(this->lista.begin() + pos); } - int size() { + [[nodiscard]] int size() { std::unique_lock lck(mtx); int longitud; diff --git a/src/server/cliente.cpp b/src/server/cliente.cpp index c9be260d..089249ff 100644 --- a/src/server/cliente.cpp +++ b/src/server/cliente.cpp @@ -1,4 +1,6 @@ #include "cliente.h" +#include "jugador.h" +#include "partida.h" #include "socket.h" #include @@ -7,8 +9,9 @@ // void anadirJugadorAPartida(Protocolo&& socketDeJugador, id idPartida); // }; + Cliente::Cliente(Socket&& socket, std::vector mapasDisponibles, - TSList& avisar) + TSList& avisar) : protocolo(std::move(socket)), avisar(avisar) { this->conectadoAPartida = false; this->mapasDisponibles = mapasDisponibles; @@ -16,14 +19,34 @@ Cliente::Cliente(Socket&& socket, std::vector mapasDisponibles, //Esto corre en un thread void Cliente::elegirPartida() { - this->protocolo.mostrarMapas(this->mapasDisponibles); + //Paso 1: Envio los mapas + this->protocolo.enviarMapas(this->mapasDisponibles); + + //Paso 2: Envio las partidas + std::vector partidasAEnviar; + for (int i = 0; i < this->avisar.size() ; i++) { + Partida* partida = this->avisar.at(i); + + if (partida == nullptr) + continue; + + + RepresentacionPartida repreActual; + repreActual.ID = i; - // this->protocolo.mostrarPartidas(this->partidasPosibles); + partidasAEnviar.push_back(repreActual); + } + this->protocolo.enviarPartidas(partidasAEnviar); + + //Paso 3: Obtengo la partida deseada int partidaElejida = this->protocolo.obtenerPartidaDeseada(); - // this->avisar->anadirJugadorAPartida(std::move(this->protocolo), partidaElejida); - this->avisar.at(partidaElejida); + Partida *partidaElegida = this->avisar.at(partidaElejida); + + Jugador *jugadorNuevo = new Jugador(std::move(this->protocolo)); + + partidaElegida->anadirJugador(jugadorNuevo); this->conectadoAPartida = true; } diff --git a/src/server/cliente.h b/src/server/cliente.h index 420a9191..2d9c1270 100644 --- a/src/server/cliente.h +++ b/src/server/cliente.h @@ -27,11 +27,11 @@ class Cliente : public Thread { //-- Notas Relacion Cliente - Jugador std::vector mapasDisponibles; //Este nombre es una mierda. Cambiar - TSList& avisar; + TSList& avisar; public: Cliente(Socket&& socket, std::vector mapasDisponibles, - TSList& avisar); + TSList& avisar); void run(); diff --git a/src/server/jugador.cpp b/src/server/jugador.cpp index e69de29b..6ada21dd 100644 --- a/src/server/jugador.cpp +++ b/src/server/jugador.cpp @@ -0,0 +1,6 @@ +#include "jugador.h" +#include "protocolo.h" + +Jugador::Jugador(Protocolo &&): + protocolo(std::move(protocolo)){ +} diff --git a/src/server/partida.cpp b/src/server/partida.cpp index 7e6d1853..f35ca08a 100644 --- a/src/server/partida.cpp +++ b/src/server/partida.cpp @@ -1,4 +1,5 @@ #include "partida.h" +#include "jugador.h" Partida::Partida() { } @@ -12,6 +13,10 @@ Partida::Partida() { */ +void Partida::anadirJugador(Jugador *jugadorNuevo) { + +} + void Partida::gameLoop() { int posJugadorActual = 0; diff --git a/src/server/partida.h b/src/server/partida.h index 7641ffec..fd51fc92 100644 --- a/src/server/partida.h +++ b/src/server/partida.h @@ -3,7 +3,6 @@ #include "gusano.h" #include "jugador.h" -#include "protocolo.h" #include "thread.h" #include #include @@ -19,7 +18,7 @@ enum class Accion { Mover, Saltar, Disparar }; class Partida : public Thread { int32_t id; - std::vector jugadores; + std::vector jugadores; std::vector gusanos; @@ -27,7 +26,7 @@ class Partida : public Thread { public: Partida(); - void anadirJugador(Protocolo&& jugadorNuevo); + void anadirJugador(Jugador *jugadorNuevo); void gameLoop(); }; diff --git a/src/server/protocolo.cpp b/src/server/protocolo.cpp index 18876c2b..0e3b89d9 100644 --- a/src/server/protocolo.cpp +++ b/src/server/protocolo.cpp @@ -1,4 +1,5 @@ #include "protocolo.h" +#include Protocolo::Protocolo(Socket&& socket): socket(std::move(socket)){}; @@ -127,18 +128,18 @@ void Protocolo::enviarMapas(std::vector mapasDisponibles) { socket.sendall(paraEnviar.data(), sizeof(id)*cantMapas, &was_closed); } -void Protocolo::enviarPartidas(TSList partidasDisponibles) { +void Protocolo::enviarPartidas(std::vector partidasDisponibles) { int8_t codigo = PARTIDAS; int cantPartidas = partidasDisponibles.size(); uint16_t cant = htons(cantPartidas); std::vector paraEnviar; - for (int32_t i = 0; i < (int32_t)cantMapas; i++) { - if (partidasDisponibles) { - id idMapa = htonl(i); - paraEnviar.push_back((char*)&idMapa); + for (int32_t i = 0; i < (int32_t)cantPartidas; i++) { + // if (partidasDisponibles) { + id idMapa = htonl(i); + paraEnviar.push_back((char*)&idMapa); - } + // } } bool was_closed = false; diff --git a/src/server/protocolo.h b/src/server/protocolo.h index 1a0e71a4..bf572e30 100644 --- a/src/server/protocolo.h +++ b/src/server/protocolo.h @@ -1,8 +1,9 @@ +#include #ifndef PROTOCOLO_HEADER #define PROTOCOLO_HEADER #include "socket.h" -#include "partida.h" +// #include "partida.h" #include "threadSafeList.h" #include #include @@ -23,6 +24,10 @@ enum Direccion {IZQUIERDA, DERECHA, SALTO, PIRUETA}; // #define MOV 7 +struct RepresentacionPartida { + int ID; +}; + class Protocolo { private: Socket socket; @@ -43,7 +48,8 @@ class Protocolo { void enviarMapas(std::vector mapasDisponibles); - void enviarPartidas(TSList partidasDisponibles); + // void enviarPartidas(TSList partidasDisponibles); + void enviarPartidas(std::vector partidasDisponibles); id obtenerMapaDeseado(); [[nodiscard]] id obtenerPartidaDeseada(); diff --git a/src/server/server.h b/src/server/server.h index e5388f3f..69a73c4e 100644 --- a/src/server/server.h +++ b/src/server/server.h @@ -41,7 +41,7 @@ class Server { // nos asegura que no va a haber espacios vacios en el //medio, lo cual facilita el obtener y modificar sus id // std::vector partidas; - TSList partidas; + TSList partidas; // [[nodiscard]] std::vector getRepresentacionPartidas(); From 4f09ff14e1703850e2538d8ec738ea77418f22c5 Mon Sep 17 00:00:00 2001 From: Tomas Fabrizio Orsi Date: Thu, 26 Oct 2023 22:25:52 -0300 Subject: [PATCH 2/2] Ahora compila y esta todo Faltaba anadirlo al CMake. JAJAJAJJAJAJAJAJAJJAJA QUE GRACIOSO JAJAJJJ GRACIAS CMAKE JAJAJAJJAJAJAJAJAJJAJA ARCHIVO A ARCHIVO DECIAN JAJAJAJJAJAJAJAJAJJAJA no. Signed-off-by: Tomas Fabrizio Orsi --- CMakeLists.txt | 3 +++ src/server/partida.cpp | 24 ++++++++++++------------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 67d3866e..a2c06203 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,6 +38,9 @@ add_executable(server # "${SERVERDIR}/recibidor.cpp" "${SERVERDIR}/server.cpp" "${SERVERDIR}/cliente.cpp" + "${SERVERDIR}/jugador.cpp" + "${SERVERDIR}/partida.cpp" + "${SERVERDIR}/protocolo.cpp" # Socket diff --git a/src/server/partida.cpp b/src/server/partida.cpp index f35ca08a..3568ffcd 100644 --- a/src/server/partida.cpp +++ b/src/server/partida.cpp @@ -19,22 +19,22 @@ void Partida::anadirJugador(Jugador *jugadorNuevo) { void Partida::gameLoop() { - int posJugadorActual = 0; + // int posJugadorActual = 0; - while (true) { - Jugador& jugadorActual = jugadores.at(posJugadorActual); - Gusano& gusanoActual = jugadorActual.getGusanoActual(); + // while (true) { + // Jugador& jugadorActual = jugadores.at(posJugadorActual); + // Gusano& gusanoActual = jugadorActual.getGusanoActual(); - //TODO: Cambiar a algo mas generico cuando tengamos las armas - // int jugadorActual.getAccion(); + // //TODO: Cambiar a algo mas generico cuando tengamos las armas + // // int jugadorActual.getAccion(); - //TODO: Implementar "calcular cambios" - //std::list areasAfectadas = this.calcularCambios(Accion); + // //TODO: Implementar "calcular cambios" + // //std::list areasAfectadas = this.calcularCambios(Accion); - //TODO: Implementar "actualizar" - //this.actualizar(); + // //TODO: Implementar "actualizar" + // //this.actualizar(); - posJugadorActual += 1; - } + // posJugadorActual += 1; + // } };