From dac70c0eed2b9d127484406bd43f6c74a5836e8f Mon Sep 17 00:00:00 2001 From: sebastian Date: Wed, 5 Aug 2026 19:50:24 +0200 Subject: [PATCH] ADD: Gamesessions --- CMakeLists.txt | 29 +++++++++++++++++++ game/src/ludo/multiplayer/IGameSession.cpp | 5 ++++ game/src/ludo/multiplayer/IGameSession.h | 23 +++++++++++++++ .../src/ludo/multiplayer/LocalGameSession.cpp | 14 +++++++++ game/src/ludo/multiplayer/LocalGameSession.h | 20 +++++++++++++ .../ludo/multiplayer/RemoteGameSession.cpp | 17 +++++++++++ game/src/ludo/multiplayer/RemoteGameSession.h | 18 ++++++++++++ 7 files changed, 126 insertions(+) create mode 100644 game/src/ludo/multiplayer/IGameSession.cpp create mode 100644 game/src/ludo/multiplayer/IGameSession.h create mode 100644 game/src/ludo/multiplayer/LocalGameSession.cpp create mode 100644 game/src/ludo/multiplayer/LocalGameSession.h create mode 100644 game/src/ludo/multiplayer/RemoteGameSession.cpp create mode 100644 game/src/ludo/multiplayer/RemoteGameSession.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d081d7d..d388c8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -251,6 +251,19 @@ add_library(Engine STATIC target_include_directories(Engine PUBLIC engine/src ${dr_libs_SOURCE_DIR}) target_link_libraries(Engine PUBLIC OpenGL::GL glfw glad glm::glm imgui spdlog::spdlog tinyobjloader stb_image OpenAL::OpenAL) +CPMAddPackage( + NAME asio + GITHUB_REPOSITORY chriskohlhoff/asio + GIT_TAG asio-1-30-2 # Eine stabile, aktuelle Version + DOWNLOAD_ONLY YES # Da Asio Header-only ist und kein CMake-Projekt hat +) + +add_library(asio INTERFACE) +target_include_directories(asio INTERFACE ${asio_SOURCE_DIR}/asio/include) +# Definiere ASIO_STANDALONE, damit Asio weiß, dass es KEIN Boost benötigt +target_compile_definitions(asio INTERFACE ASIO_STANDALONE) + + # --- GameLib: Spiel-Logik, unabhängig von main.cpp testbar --- add_library(GameLib STATIC game/src/ColorRaceApp.cpp @@ -303,6 +316,12 @@ add_executable(ColorRace engine/src/core/audio/ecs/AudioSystem.cpp engine/src/core/audio/ecs/AudioSystem.h engine/src/core/audio/ecs/BlockingSoundComponent.h + game/src/ludo/multiplayer/IGameSession.cpp + game/src/ludo/multiplayer/IGameSession.h + game/src/ludo/multiplayer/LocalGameSession.cpp + game/src/ludo/multiplayer/LocalGameSession.h + game/src/ludo/multiplayer/RemoteGameSession.cpp + game/src/ludo/multiplayer/RemoteGameSession.h ) target_link_libraries(ColorRace PRIVATE @@ -323,5 +342,15 @@ target_link_libraries(ColorRaceTests PRIVATE GTest::gtest_main ) +if(WIN32) + # Windows benötigt zwingend die WinSock-Libraries und Win-Header-Anpassungen + target_link_libraries(ColorRace PRIVATE ws2_32 mswsock) + target_compile_definitions(ColorRace PRIVATE _WIN32_WINNT=0x0601) # Mindestens Windows 7 Target +else() + # Linux/macOS benötigt die Thread-Library für die Hintergrund-Worker + find_package(Threads REQUIRED) + target_link_libraries(ColorRace PRIVATE Threads::Threads) +endif() + include(GoogleTest) gtest_discover_tests(ColorRaceTests) \ No newline at end of file diff --git a/game/src/ludo/multiplayer/IGameSession.cpp b/game/src/ludo/multiplayer/IGameSession.cpp new file mode 100644 index 0000000..555bc8b --- /dev/null +++ b/game/src/ludo/multiplayer/IGameSession.cpp @@ -0,0 +1,5 @@ +// +// Created by sebastian on 05.08.26. +// + +#include "IGameSession.h" diff --git a/game/src/ludo/multiplayer/IGameSession.h b/game/src/ludo/multiplayer/IGameSession.h new file mode 100644 index 0000000..0da60f5 --- /dev/null +++ b/game/src/ludo/multiplayer/IGameSession.h @@ -0,0 +1,23 @@ +// +// Created by sebastian on 05.08.26. +// + +#ifndef COLORRACE_IGAMESESSION_H +#define COLORRACE_IGAMESESSION_H +#include "ludo/LudoTypes.h" + + +class IGameSession { +public: + virtual ~IGameSession() = default; + + // Befehle von der UI an das Spiel senden + virtual void sendCommand(const std::variant &command) { + } + + // Events vom Spiel abholen, um die UI zu aktualisieren + virtual std::vector pollEvents() = 0; +}; + + +#endif //COLORRACE_IGAMESESSION_H diff --git a/game/src/ludo/multiplayer/LocalGameSession.cpp b/game/src/ludo/multiplayer/LocalGameSession.cpp new file mode 100644 index 0000000..a7422f3 --- /dev/null +++ b/game/src/ludo/multiplayer/LocalGameSession.cpp @@ -0,0 +1,14 @@ +// +// Created by sebastian on 05.08.26. +// + +#include "LocalGameSession.h" + +void LocalGameSession::sendCommand(const std::variant &command) { + IGameSession::sendCommand(command); + m_gameMode.sendCommand(command); +} + +std::vector LocalGameSession::pollEvents() { + return m_gameMode.pollEvents(); +} diff --git a/game/src/ludo/multiplayer/LocalGameSession.h b/game/src/ludo/multiplayer/LocalGameSession.h new file mode 100644 index 0000000..fe32775 --- /dev/null +++ b/game/src/ludo/multiplayer/LocalGameSession.h @@ -0,0 +1,20 @@ +// +// Created by sebastian on 05.08.26. +// + +#ifndef COLORRACE_LOCALGAMESESSION_H +#define COLORRACE_LOCALGAMESESSION_H +#include "IGameSession.h" +#include "ludo/LudoGameMode.h" + + +class LocalGameSession : public IGameSession{ +private: + ludo::LudoGameMode m_gameMode; +public: + void sendCommand(const std::variant &command) override; + std::vector pollEvents() override; +}; + + +#endif //COLORRACE_LOCALGAMESESSION_H diff --git a/game/src/ludo/multiplayer/RemoteGameSession.cpp b/game/src/ludo/multiplayer/RemoteGameSession.cpp new file mode 100644 index 0000000..08718fa --- /dev/null +++ b/game/src/ludo/multiplayer/RemoteGameSession.cpp @@ -0,0 +1,17 @@ +// +// Created by sebastian on 05.08.26. +// + +#include "RemoteGameSession.h" + +void RemoteGameSession::sendCommand(const std::variant &command) { + // 1. In JSON / Bytes verpacken + // 2. Über den Socket asynchron an den Server senden + // m_socket.send(serializedCommand); +} + +std::vector RemoteGameSession::pollEvents() { + // Holt die Events ab, die der Netzwerk-Thread im Hintergrund + // vom Server empfangen und in die Queue gelegt hat. + return std::vector(); +} diff --git a/game/src/ludo/multiplayer/RemoteGameSession.h b/game/src/ludo/multiplayer/RemoteGameSession.h new file mode 100644 index 0000000..273df8c --- /dev/null +++ b/game/src/ludo/multiplayer/RemoteGameSession.h @@ -0,0 +1,18 @@ +// +// Created by sebastian on 05.08.26. +// + +#ifndef COLORRACE_REMOTEGAMESESSION_H +#define COLORRACE_REMOTEGAMESESSION_H +#include "IGameSession.h" + + +class RemoteGameSession : public IGameSession{ +private: +public: + void sendCommand(const std::variant &command) override; + std::vector pollEvents() override; +}; + + +#endif //COLORRACE_REMOTEGAMESESSION_H