/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include "GetAvailableWorldsServiceHandler.h" #include "SimulationInterfaces/TagFilter.h" #include "SimulationInterfaces/WorldResource.h" #include #include #include #include #include #include #include #include namespace ROS2SimulationInterfaces { namespace { [[nodiscard]] SimulationInterfaces::GetWorldsRequest ConvertROS2Request( const GetAvailableWorldsServiceHandler::Request& ros2Request) { SimulationInterfaces::GetWorldsRequest request; request.continueOnError = ros2Request.continue_on_error; request.offlineOnly = ros2Request.offline_only; // copy additional sources AZStd::ranges::transform(ros2Request.additional_sources, AZStd::back_inserter(request.additionalSources), &std::string::c_str); request.filter.m_mode = ros2Request.filter.filter_mode; AZStd::ranges::transform( ros2Request.filter.tags, AZStd::inserter(request.filter.m_tags, request.filter.m_tags.end()), &std::string::c_str); return request; } } // namespace AZStd::unordered_set GetAvailableWorldsServiceHandler::GetProvidedFeatures() { return AZStd::unordered_set{ SimulationFeatures::AVAILABLE_WORLDS }; } AZStd::optional GetAvailableWorldsServiceHandler::HandleServiceRequest( const std::shared_ptr header, const Request& request) { Response response; AZ::Outcome availableWorlds; const SimulationInterfaces::GetWorldsRequest getWorldsRequest = ConvertROS2Request(request); SimulationInterfaces::LevelManagerRequestBus::BroadcastResult( availableWorlds, &SimulationInterfaces::LevelManagerRequests::GetAvailableWorlds, getWorldsRequest); if (!availableWorlds.IsSuccess()) { response.result.result = availableWorlds.GetError().m_errorCode; response.result.error_message = availableWorlds.GetError().m_errorString.c_str(); } else { response.result.result = simulation_interfaces::msg::Result::RESULT_OK; const auto& worldsList = availableWorlds.GetValue(); AZStd::ranges::transform( worldsList, AZStd::back_inserter(response.worlds), &SimulationInterfaces::Utils::ConvertToRos2WorldResource); } return response; } } // namespace ROS2SimulationInterfaces