LCOV - code coverage report
Current view: top level - communication - NetworkEventDispatcher.cpp (source / functions) Coverage Total Hit
Test: coverage-src.info Lines: 88.5 % 26 23
Test Date: 2025-12-21 01:16:59 Functions: 66.7 % 3 2

            Line data    Source code
       1              : #include <utility>
       2              : 
       3              : #include "communication/NetworkEvent.hpp"
       4              : #include "communication/NetworkEventDispatcher.hpp"
       5              : #include "communication/NetworkMessage.hpp"
       6              : #include "communication/NetworkPackets.hpp"
       7              : 
       8              : #include "core/math/Glm.hpp"
       9              : 
      10              : #include "spdlog/spdlog.h"
      11              : 
      12              : namespace Soldank
      13              : {
      14            8 : NetworkEventDispatcher::NetworkEventDispatcher(
      15            8 :   const std::vector<std::shared_ptr<INetworkEventHandler>>& network_event_handlers)
      16            8 :     : network_event_handlers_(network_event_handlers)
      17              : {
      18            8 : }
      19              : 
      20            8 : NetworkEventDispatcher::TDispatchResult NetworkEventDispatcher::ProcessNetworkMessage(
      21              :   const ConnectionMetadata& connection_metadata,
      22              :   const NetworkMessage& network_message)
      23              : {
      24            8 :     auto network_event_or_error = network_message.GetNetworkEvent();
      25            8 :     if (!network_event_or_error.has_value()) {
      26            1 :         return { NetworkEventDispatchResult::ParseError, network_event_or_error.error() };
      27              :     }
      28              : 
      29            7 :     auto network_event = *network_event_or_error;
      30              : 
      31           12 :     for (const auto& network_event_handler : network_event_handlers_) {
      32           11 :         if (!network_event_handler->ShouldHandleNetworkEvent(network_event)) {
      33            5 :             continue;
      34              :         }
      35              : 
      36              :         auto parse_error_or_nothing =
      37            6 :           network_event_handler->ValidateNetworkMessage(network_message);
      38            6 :         if (parse_error_or_nothing.has_value()) {
      39            2 :             return { NetworkEventDispatchResult::ParseError, parse_error_or_nothing.value() };
      40              :         }
      41              : 
      42            4 :         auto handler_result = network_event_handler->HandleNetworkMessage(
      43            4 :           connection_metadata.connection_id, network_message);
      44            4 :         switch (handler_result) {
      45            2 :             case NetworkEventHandlerResult::Success:
      46            2 :                 return { NetworkEventDispatchResult::Success, handler_result };
      47            2 :             case NetworkEventHandlerResult::Failure:
      48            2 :                 return { NetworkEventDispatchResult::HandlerFailure, handler_result };
      49              :         }
      50              :     }
      51              : 
      52            1 :     return { NetworkEventDispatchResult::ParseError, ParseError::InvalidNetworkEvent };
      53              : }
      54              : 
      55            0 : void NetworkEventDispatcher::AddNetworkEventHandler(
      56              :   const std::shared_ptr<INetworkEventHandler>& network_event_handler)
      57              : {
      58            0 :     network_event_handlers_.push_back(network_event_handler);
      59            0 : }
      60              : } // namespace Soldank
        

Generated by: LCOV version 2.0-1