LoadWorldServiceHandler.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include "LoadWorldServiceHandler.h"
  9. #include "SimulationInterfaces/WorldResource.h"
  10. #include <AzCore/std/string/string.h>
  11. #include <Clients/CommonUtilities.h>
  12. #include <SimulationInterfaces/LevelManagerRequestBus.h>
  13. namespace ROS2SimulationInterfaces
  14. {
  15. namespace
  16. {
  17. [[nodiscard]] SimulationInterfaces::LoadWorldRequest ConvertROS2Request(const LoadWorldServiceHandler::Request& ros2Request)
  18. {
  19. SimulationInterfaces::LoadWorldRequest request;
  20. request.failOnUnsupportedElement = ros2Request.fail_on_unsupported_element;
  21. request.ignoreMissingOrUnsupportedAssets = ros2Request.ignore_missing_or_unsupported_assets;
  22. request.levelResource.m_uri = ros2Request.uri.c_str();
  23. request.levelResource.m_resourceString = ros2Request.resource_string.c_str();
  24. return request;
  25. }
  26. } // namespace
  27. AZStd::unordered_set<SimulationFeatureType> LoadWorldServiceHandler::GetProvidedFeatures()
  28. {
  29. return AZStd::unordered_set<SimulationFeatureType>{ SimulationFeatures::WORLD_LOADING };
  30. }
  31. AZStd::optional<LoadWorldServiceHandler::Response> LoadWorldServiceHandler::HandleServiceRequest(
  32. const std::shared_ptr<rmw_request_id_t> header, const Request& request)
  33. {
  34. AZ::Outcome<SimulationInterfaces::WorldResource, SimulationInterfaces::FailedResult> loadedWorld;
  35. SimulationInterfaces::LoadWorldRequest loadWorldRequest = ConvertROS2Request(request);
  36. SimulationInterfaces::LevelManagerRequestBus::BroadcastResult(
  37. loadedWorld, &SimulationInterfaces::LevelManagerRequests::LoadWorld, loadWorldRequest);
  38. Response response;
  39. if (!loadedWorld.IsSuccess())
  40. {
  41. response.result.result = loadedWorld.GetError().m_errorCode;
  42. response.result.error_message = loadedWorld.GetError().m_errorString.c_str();
  43. }
  44. else
  45. {
  46. response.result.result = simulation_interfaces::msg::Result::RESULT_OK;
  47. response.world = SimulationInterfaces::Utils::ConvertToRos2WorldResource(loadedWorld.GetValue());
  48. }
  49. return response;
  50. }
  51. } // namespace ROS2SimulationInterfaces