Program Listing for File publisher.h

Return to documentation for file (ecal/core/include/ecal/config/publisher.h)

/* ========================= eCAL LICENSE =================================
 *
 * Copyright (C) 2016 - 2025 Continental Corporation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * ========================= eCAL LICENSE =================================
*/

#pragma once

#include <ecal/types/custom_data_types.h>
#include <ecal/config/transport_layer.h>

#include <cstddef>
#include <vector>

namespace eCAL
{
  namespace Publisher
  {
    namespace Layer
    {
      namespace SHM
      {
        struct Configuration
        {
          bool         enable                  { true };

          bool         zero_copy_mode          { false };
          unsigned int acknowledge_timeout_ms  { 0U };
          unsigned int memfile_buffer_count    { 1U };
          unsigned int memfile_min_size_bytes  { 4096 };
          unsigned int memfile_reserve_percent { 50 };
        };
      }

      namespace UDP
      {
        struct Configuration
        {
          bool enable { true };
        };
      }

      namespace TCP
      {
        struct Configuration
        {
          bool enable { true };
        };
      }

      struct Configuration
      {
        SHM::Configuration shm;
        UDP::Configuration udp;
        TCP::Configuration tcp;
      };
    }

    struct Configuration
    {
      Layer::Configuration layer;

      using LayerPriorityVector = std::vector<TransportLayer::eType>;
      LayerPriorityVector  layer_priority_local    { TransportLayer::eType::shm,    TransportLayer::eType::udp_mc, TransportLayer::eType::tcp };
      LayerPriorityVector  layer_priority_remote   { TransportLayer::eType::udp_mc, TransportLayer::eType::tcp };
    };
  }
}