Skip to content

gabrieldiem/sockets-poc-with-cpp

Repository files navigation

TP 1: Sockets - Taller de Programación 1 Veiga

Este repositorio contiene la solución propuesta para la PoC detallada en la consigna.

Diagrama de clases

Para la arquitectura del proyecto se generó una solución "empaquetada" o standalone, es decir que el usuario del juego sólo tiene que instanciar desde el servidor el ComboBreakerGameServer y desde el cliente el ComboBreakerGameClient y ya tendría todo listo para jugar.

Para el protocolo, en principio se planteó una estructura donde hubiera una sola clase GameProtocol, o clases GameProtocolClient y GameProtocolServer que hereden de GameProtocol. Sin embargo no se encontró suficiente funcionalidad compartida para realizar esa implementación, por lo que se mantienen como clases separadas, pero si el scope creciera se podría ir por ese camino.

Diagrama de módulos

Setup

Instalar pre-commit hooks:

pre-commit install

Para crear un commit sin correr los hooks se debe ejecutar:

git commit --no-verify

Para correr cppcheck sin necesidad de un commit se debe ejecutar:

pre-commit run --all-files

Compilación

Compilación con código as-is:

make

Compilación con código con wrap randomizado de sockets:

make wrapsocks=1

Running

Correr tests sin valgrind:

./run_tests.sh ./ casos/ single-client no-valgrind 60 10

Correr tests con valgrind:

./run_tests.sh ./ casos/ single-client valgrind 60 10

Comparar outputs:

./compare_outputs.sh casos/ salidas/

Supresión de flags de cppcheck

En algunos headers (.h) puntuales se suprimió el warning unusedStructMember de cppcheck. Esta decisión fue tomada porque es un falso positivo, en todos los casos que sucede, es sólo en headers de clases sobre variables privadas que sí se usan dentro del código (en el .cpp).

En particular se usa en los headers de: action_codes, combos, liberror, resolver, resolvererror, socket, game_protocol_client y game_protocol_server, combo_breaker_game_client y combo_breaker_game_server.

Refactor para la reentrega

Para aplicar las mejoras para la reentrega se hizo un refactor de la lógica de cliente y de servidor, además de la de protocolo y socket.

En la clase Socket se reutilizó código para simplificar la implementación de los métodos para halfwords.

Se pasó lógica que estaba erróneamente colocada en el protolo a las clases ComboBreakerGame. Quedando del lado del servidor un ComboBreakerGameServer y este usando GameProtocolServer, y de manera análoga del lado del cliente con ComboBreakerGameClient y GameProtocolClient.

Licencia

GPL v2

Código fuente utilizado

Se agradece el código proveído por la cátedra para los sockets. Se trabajó sobre ese código y se lo modificó. Código fuente usado bajo licencia GPL v2: https://github.com/eldipa/sockets-en-cpp agradecimiento a @eldipa.