From 64286610cd2424a3165b244b54d5b2184eec8983 Mon Sep 17 00:00:00 2001 From: rahulsutariya Date: Fri, 12 Jun 2026 17:59:23 +0530 Subject: [PATCH] feat(gateway): replace ServiceElementConfiguration with impl::EventInfo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the gateway-local ServiceElementConfiguration and reuse impl::EventInfo/GenericSkeletonServiceElementInfo — the types GenericSkeleton::Create() already requires. Issue: https://github.com/eclipse-score/communication/issues/387 --- .../gateway_application.cpp | 19 ++------ .../gateway_application/gateway_application.h | 2 +- .../gateway_application/gateway_core.h | 2 +- score/mw/com/gateway/transport_layer/BUILD | 12 +---- .../com/gateway/transport_layer/transport.h | 28 +---------- .../gateway/transport_layer/transport_mock.h | 2 +- .../transport_layer/transport_test.cpp | 48 ------------------- 7 files changed, 11 insertions(+), 102 deletions(-) delete mode 100644 score/mw/com/gateway/transport_layer/transport_test.cpp diff --git a/score/mw/com/gateway/gateway_application/gateway_application.cpp b/score/mw/com/gateway/gateway_application/gateway_application.cpp index 5e73dd087..84af1e8b6 100644 --- a/score/mw/com/gateway/gateway_application/gateway_application.cpp +++ b/score/mw/com/gateway/gateway_application/gateway_application.cpp @@ -197,12 +197,12 @@ void GatewayApplication::PropagateService(const std::string& specifier_str) return; } - std::vector elements{}; + std::vector elements{}; const auto& event_map = proxy_it->second.GetEvents(); for (auto it = event_map.cbegin(); it != event_map.cend(); ++it) { const auto sample_size = it->second.GetSampleSize(); - elements.push_back(ServiceElementConfiguration{std::string(it->first), DataTypeSizeInfo{sample_size, 0U}}); + elements.push_back(impl::EventInfo{it->first, impl::DataTypeMetaInfo{sample_size, 0U}}); } auto provide_result = transport_layer_->ProvideService(std::move(specifier_result).value(), std::move(elements)); @@ -334,7 +334,7 @@ void GatewayApplication::ReRegisterActiveEventSubscriptions(const std::string& s } score::Result GatewayApplication::ProvideService(impl::InstanceSpecifier service_instance_specifier, - std::vector service_elements) + std::vector service_elements) { if (!IsServiceInstanceAccepted(service_instance_specifier.ToString())) { @@ -368,17 +368,8 @@ score::Result GatewayApplication::ProvideService(impl::InstanceSpecifier s return {}; } - std::vector event_infos; - event_infos.reserve(service_elements.size()); - - for (const auto& element : service_elements) - { - event_infos.push_back( - {element.element_name, impl::DataTypeMetaInfo{element.size_info.Size(), element.size_info.Alignment()}}); - } - impl::GenericSkeletonServiceElementInfo skeleton_info; - skeleton_info.events = event_infos; + skeleton_info.events = service_elements; auto skeleton_result = impl::GenericSkeleton::Create(service_instance_specifier, skeleton_info); if (!skeleton_result.has_value()) { @@ -396,7 +387,7 @@ score::Result GatewayApplication::ProvideService(impl::InstanceSpecifier s auto& skeleton = skeletons_.at(service_instance_specifier_str); for (const auto& element : service_elements) { - RegisterEventReceiveHandlerCallback(skeleton, service_instance_specifier_str, element.element_name); + RegisterEventReceiveHandlerCallback(skeleton, service_instance_specifier_str, std::string{element.name}); } auto offer_result = skeleton.OfferService(); diff --git a/score/mw/com/gateway/gateway_application/gateway_application.h b/score/mw/com/gateway/gateway_application/gateway_application.h index d945d40f7..a27ba0159 100644 --- a/score/mw/com/gateway/gateway_application/gateway_application.h +++ b/score/mw/com/gateway/gateway_application/gateway_application.h @@ -53,7 +53,7 @@ class GatewayApplication : public GatewayCore score::Result Start(); score::Result ProvideService(impl::InstanceSpecifier service_instance_specifier, - std::vector service_elements) override; + std::vector service_elements) override; void StopOfferService(impl::InstanceSpecifier service_instance_specifier) override; score::Result OfferService(impl::InstanceSpecifier service_instance_specifier) override; score::Result RegisterUpdateNotification(impl::InstanceSpecifier service_instance_specifier, diff --git a/score/mw/com/gateway/gateway_application/gateway_core.h b/score/mw/com/gateway/gateway_application/gateway_core.h index 59ba3d957..f60602bd6 100644 --- a/score/mw/com/gateway/gateway_application/gateway_core.h +++ b/score/mw/com/gateway/gateway_application/gateway_core.h @@ -40,7 +40,7 @@ class GatewayCore /// for the service instance, which will be realized as a Forwarding Skeleton (GenericSkeleton). /// \return result indicating success or failure. virtual score::Result ProvideService(impl::InstanceSpecifier service_instance_specifier, - std::vector service_elements) = 0; + std::vector service_elements) = 0; /// \brief Stop providing the given service instance locally within the destination domain. /// \param service_instance_specifier instance specifier of the service instance to stop offering. It is expected, diff --git a/score/mw/com/gateway/transport_layer/BUILD b/score/mw/com/gateway/transport_layer/BUILD index 72eccd0ec..6ce93a74d 100644 --- a/score/mw/com/gateway/transport_layer/BUILD +++ b/score/mw/com/gateway/transport_layer/BUILD @@ -28,9 +28,9 @@ cc_library( "//score/mw/com/gateway:__subpackages__", ], deps = [ + "//score/mw/com/impl:generic_skeleton", "//score/mw/com/impl:instance_specifier", "//score/mw/com/impl:service_element_type", - "@score_baselibs//score/memory:data_type_size_info", "@score_baselibs//score/result", ], ) @@ -81,13 +81,3 @@ cc_unit_test( "@score_baselibs//score/result", ], ) - -cc_unit_test( - name = "transport_test", - srcs = ["transport_test.cpp"], - features = COMPILER_WARNING_FEATURES, - deps = [ - ":transport", - "@score_baselibs//score/result", - ], -) diff --git a/score/mw/com/gateway/transport_layer/transport.h b/score/mw/com/gateway/transport_layer/transport.h index 518252b91..7f3ab636a 100644 --- a/score/mw/com/gateway/transport_layer/transport.h +++ b/score/mw/com/gateway/transport_layer/transport.h @@ -13,41 +13,17 @@ #ifndef SCORE_MW_COM_GATEWAY_TRANSPORT_LAYER_TRANSPORT_H #define SCORE_MW_COM_GATEWAY_TRANSPORT_LAYER_TRANSPORT_H -#include "score/memory/data_type_size_info.h" +#include "score/mw/com/impl/generic_skeleton.h" #include "score/mw/com/impl/instance_specifier.h" #include "score/mw/com/impl/service_element_type.h" #include "score/result/result.h" -#include #include -#include -#include #include namespace score::mw::com::gateway { -using DataTypeSizeInfo = score::memory::DataTypeSizeInfo; - -static_assert(std::is_trivially_copyable_v, "DataTypeSizeInfo must be trivially copyable"); - -/// \brief Describes a single service element (event, field, or method) and its serialization type info. -struct ServiceElementConfiguration -{ - std::string element_name; - DataTypeSizeInfo size_info; - - std::tuple GetSerializeMembers() const - { - return {element_name, size_info}; - } - - std::tuple GetSerializeMembers() - { - return {element_name, size_info}; - } -}; - /// \brief Abstract base class for gateway transport layer implementations. class Transport { @@ -78,7 +54,7 @@ class Transport /// provide. This information is needed to create the (generic) skeleton on the destination gateway side. /// \return result indicating success or failure. virtual score::Result ProvideService(impl::InstanceSpecifier service_instance_specifier, - std::vector service_elements) = 0; + std::vector service_elements) = 0; /// \brief OfferService API to trigger service-instance offering at the destination gateway side. /// \details Transport layer implementation shall "forward" this call to the destination gateway and trigger the diff --git a/score/mw/com/gateway/transport_layer/transport_mock.h b/score/mw/com/gateway/transport_layer/transport_mock.h index adbe248dc..1a5c80056 100644 --- a/score/mw/com/gateway/transport_layer/transport_mock.h +++ b/score/mw/com/gateway/transport_layer/transport_mock.h @@ -28,7 +28,7 @@ class TransportMock : public Transport MOCK_METHOD(void, Shutdown, (), (override)); MOCK_METHOD(score::Result, ProvideService, - (impl::InstanceSpecifier, std::vector), + (impl::InstanceSpecifier, std::vector), (override)); MOCK_METHOD(score::Result, StopOfferService, (impl::InstanceSpecifier), (override)); MOCK_METHOD(score::Result, OfferService, (impl::InstanceSpecifier), (override)); diff --git a/score/mw/com/gateway/transport_layer/transport_test.cpp b/score/mw/com/gateway/transport_layer/transport_test.cpp deleted file mode 100644 index e46c11d10..000000000 --- a/score/mw/com/gateway/transport_layer/transport_test.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************** - * Copyright (c) 2026 Contributors to the Eclipse Foundation - * - * See the NOTICE file(s) distributed with this work for additional - * information regarding copyright ownership. - * - * This program and the accompanying materials are made available under the - * terms of the Apache License Version 2.0 which is available at - * https://www.apache.org/licenses/LICENSE-2.0 - * - * SPDX-License-Identifier: Apache-2.0 - ********************************************************************************/ -#include "score/mw/com/gateway/transport_layer/transport.h" - -#include - -#include - -namespace score::mw::com::gateway -{ -namespace -{ - -TEST(ServiceElementConfigurationTest, SerializeMembersExposeMutableReferences) -{ - ServiceElementConfiguration config{"EventA", DataTypeSizeInfo{32U, 8U}}; - auto members = config.GetSerializeMembers(); - - std::get<0>(members) = "EventB"; - std::get<1>(members) = DataTypeSizeInfo{64U, 8U}; - - EXPECT_EQ(config.element_name, "EventB"); - EXPECT_EQ(config.size_info.Size(), 64U); - EXPECT_EQ(config.size_info.Alignment(), 8U); -} - -TEST(ServiceElementConfigurationTest, SerializeMembersConstOverloadReturnsConstReferences) -{ - const ServiceElementConfiguration config{"EventA", DataTypeSizeInfo{32U, 8U}}; - const auto members = config.GetSerializeMembers(); - - EXPECT_EQ(std::get<0>(members), "EventA"); - EXPECT_EQ(std::get<1>(members).Size(), 32U); - EXPECT_EQ(std::get<1>(members).Alignment(), 8U); -} - -} // namespace -} // namespace score::mw::com::gateway