1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\WebapiAsync\Code\Generator\Config\RemoteServiceReader;
- use Magento\Framework\Communication\ConfigInterface as CommunicationConfig;
- use Magento\AsynchronousOperations\Model\ConfigInterface as WebApiAsyncConfig;
- use Magento\Framework\Communication\Config\ReflectionGenerator;
- /**
- * Remote service reader with auto generated configuration for communication.xml
- */
- class Communication implements \Magento\Framework\Config\ReaderInterface
- {
- /**
- * @var WebApiAsyncConfig
- */
- private $webapiAsyncConfig;
- /**
- * @var \Magento\Framework\Communication\Config\ReflectionGenerator
- */
- private $reflectionGenerator;
- /**
- * Initialize dependencies.
- *
- * @param WebApiAsyncConfig $webapiAsyncConfig
- * @param ReflectionGenerator $reflectionGenerator
- */
- public function __construct(
- WebApiAsyncConfig $webapiAsyncConfig,
- ReflectionGenerator $reflectionGenerator
- ) {
- $this->webapiAsyncConfig = $webapiAsyncConfig;
- $this->reflectionGenerator = $reflectionGenerator;
- }
- /**
- * Generate communication configuration based on remote services declarations
- *
- * @param string|null $scope
- * @return array
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- */
- public function read($scope = null)
- {
- $asyncServicesData = $this->webapiAsyncConfig->getServices();
- $result = [];
- foreach ($asyncServicesData as $serviceData) {
- $topicName = $serviceData[WebApiAsyncConfig::SERVICE_PARAM_KEY_TOPIC];
- $serviceClass = $serviceData[WebApiAsyncConfig::SERVICE_PARAM_KEY_INTERFACE];
- $serviceMethod = $serviceData[WebApiAsyncConfig::SERVICE_PARAM_KEY_METHOD];
- $topicConfig = $this->reflectionGenerator->generateTopicConfigForServiceMethod(
- $topicName,
- $serviceClass,
- $serviceMethod,
- [
- WebApiAsyncConfig::DEFAULT_HANDLER_NAME => [
- CommunicationConfig::HANDLER_TYPE => $serviceClass,
- CommunicationConfig::HANDLER_METHOD => $serviceMethod,
- ],
- ],
- false
- );
- $rewriteTopicParams = [
- CommunicationConfig::TOPIC_IS_SYNCHRONOUS => false,
- CommunicationConfig::TOPIC_RESPONSE => null,
- ];
- $result[$topicName] = array_merge($topicConfig, $rewriteTopicParams);
- }
- $result[WebApiAsyncConfig::SYSTEM_TOPIC_NAME] = WebApiAsyncConfig::SYSTEM_TOPIC_CONFIGURATION;
- return [CommunicationConfig::TOPICS => $result];
- }
- }
|