/**
  * @param ActionEvent $event
  */
 public function onDispatchInitialize(ActionEvent $event)
 {
     $bus = $event->getTarget();
     if ($bus instanceof EventBus) {
         $listeners = $event->getParam(EventBus::EVENT_PARAM_EVENT_LISTENERS, []);
         $listeners[] = $this->messageProducer;
         $event->setParam(EventBus::EVENT_PARAM_EVENT_LISTENERS, $listeners);
     } else {
         $event->setParam(MessageBus::EVENT_PARAM_MESSAGE_HANDLER, $this->messageProducer);
     }
 }
 /**
  * @param ActionEvent $actionEvent
  */
 public function __invoke(ActionEvent $actionEvent)
 {
     $message = $actionEvent->getParam(MessageBus::EVENT_PARAM_MESSAGE);
     if (!is_array($message)) {
         return;
     }
     if (!array_key_exists('message_name', $message)) {
         return;
     }
     $messageName = $message['message_name'];
     unset($message['message_name']);
     $message = $this->messageFactory->createMessageFromArray($messageName, $message);
     $actionEvent->setParam(MessageBus::EVENT_PARAM_MESSAGE, $message);
     $actionEvent->setParam(MessageBus::EVENT_PARAM_MESSAGE_NAME, $messageName);
 }
 /**
  * @param ActionEvent $actionEvent
  */
 public function onInitializeEvent(ActionEvent $actionEvent)
 {
     $message = $actionEvent->getParam(MessageBus::EVENT_PARAM_MESSAGE);
     if (is_string($message)) {
         $actionEvent->setParam(MessageBus::EVENT_PARAM_MESSAGE_NAME, $message);
     }
 }
 public function onLocateMessageHandler(ActionEvent $actionEvent)
 {
     $messageHandlerAlias = $actionEvent->getParam(MessageBus::EVENT_PARAM_MESSAGE_HANDLER);
     if (is_string($messageHandlerAlias) && $this->serviceLocator->has($messageHandlerAlias)) {
         $actionEvent->setParam(MessageBus::EVENT_PARAM_MESSAGE_HANDLER, $this->serviceLocator->get($messageHandlerAlias));
     }
 }
 /**
  * @param ActionEvent $e
  */
 public function __invoke(ActionEvent $e)
 {
     $message = $e->getParam(MessageBus::EVENT_PARAM_MESSAGE);
     $handler = $e->getParam(MessageBus::EVENT_PARAM_MESSAGE_HANDLER);
     if ($this->canInvoke($handler, $message)) {
         $this->invoke($handler, $message);
         $e->setParam(MessageBus::EVENT_PARAM_MESSAGE_HANDLED, true);
     }
 }
 /**
  * Add event metadata on event store appendToStream.
  *
  * @param ActionEvent $appendToStreamEvent
  */
 public function onEventStoreAppendToStream(ActionEvent $appendToStreamEvent)
 {
     $streamEvents = $appendToStreamEvent->getParam('streamEvents');
     if (!$streamEvents instanceof \Iterator) {
         return;
     }
     $streamEvents = $this->handleRecordedEvents($streamEvents);
     $appendToStreamEvent->setParam('streamEvents', $streamEvents);
 }
 /**
  * @param ActionEvent $actionEvent
  */
 public function __invoke(ActionEvent $actionEvent)
 {
     $finder = $actionEvent->getParam(QueryBus::EVENT_PARAM_MESSAGE_HANDLER);
     $query = $actionEvent->getParam(QueryBus::EVENT_PARAM_MESSAGE);
     $deferred = $actionEvent->getParam(QueryBus::EVENT_PARAM_DEFERRED);
     if (is_object($finder)) {
         $queryName = $this->determineQueryName($query);
         if (method_exists($finder, $queryName)) {
             $finder->{$queryName}($query, $deferred);
             $actionEvent->setParam(MessageBus::EVENT_PARAM_MESSAGE_HANDLED, true);
         }
     }
 }
 /**
  * @param ActionEvent $actionEvent
  */
 public function onRouteMessage(ActionEvent $actionEvent)
 {
     $messageName = (string) $actionEvent->getParam(MessageBus::EVENT_PARAM_MESSAGE_NAME);
     if (empty($messageName)) {
         return;
     }
     $message = $actionEvent->getParam(MessageBus::EVENT_PARAM_MESSAGE);
     //if the message is marked with AsyncMessage, but had not yet been sent via async then sent to async producer
     if ($message instanceof AsyncMessage && !(isset($message->metadata()['handled-async']) && $message->metadata()['handled-async'] === true)) {
         //apply meta data, this is need to we can identify that the message has already been send via the async producer
         $message = $message->withAddedMetadata('handled-async', true);
         // update ActionEvent
         $actionEvent->setParam(MessageBus::EVENT_PARAM_MESSAGE, $message);
         if ($actionEvent->getTarget() instanceof CommandBus || $actionEvent->getTarget() instanceof QueryBus) {
             $actionEvent->setParam(MessageBus::EVENT_PARAM_MESSAGE_HANDLER, $this->asyncMessageProducer);
         } else {
             //Target is an event bus so we set message producer as the only listener of the message
             $actionEvent->setParam(EventBus::EVENT_PARAM_EVENT_LISTENERS, [$this->asyncMessageProducer]);
         }
         return;
     }
     // pass ActionEvent to decorated router
     return $this->router->onRouteMessage($actionEvent);
 }
 /**
  * @param ActionEvent $actionEvent
  * @throws UnauthorizedException
  */
 public function onFinalize(ActionEvent $actionEvent)
 {
     $promise = $actionEvent->getParam(QueryBus::EVENT_PARAM_PROMISE);
     if ($promise instanceof Promise) {
         $newPromise = $promise->then(function ($result) use($actionEvent) {
             if (!$this->authorizationService->isGranted($actionEvent->getParam(MessageBus::EVENT_PARAM_MESSAGE_NAME), $result)) {
                 $actionEvent->stopPropagation(true);
                 throw new UnauthorizedException();
             }
         });
         $actionEvent->setParam(QueryBus::EVENT_PARAM_PROMISE, $newPromise);
     } elseif (!$this->authorizationService->isGranted($actionEvent->getParam(MessageBus::EVENT_PARAM_MESSAGE_NAME))) {
         $actionEvent->stopPropagation(true);
         throw new UnauthorizedException();
     }
 }
Exemple #10
0
 /**
  * @param ActionEvent $actionEvent
  * @param \Exception $ex
  * @throws Exception\MessageDispatchException
  */
 protected function handleException(ActionEvent $actionEvent, \Exception $ex)
 {
     $failedPhase = $actionEvent->getName();
     $actionEvent->setParam(self::EVENT_PARAM_EXCEPTION, $ex);
     $this->triggerError($actionEvent);
     $this->triggerFinalize($actionEvent);
     //Check if a listener has removed the exception to indicate that it was able to handle it
     if ($ex = $actionEvent->getParam(self::EVENT_PARAM_EXCEPTION)) {
         $actionEvent->setName($failedPhase);
         throw MessageDispatchException::failed($actionEvent, $ex);
     }
 }
 /**
  * @param ActionEvent $actionEvent
  */
 public function onRouteEvent(ActionEvent $actionEvent)
 {
     $messageName = (string) $actionEvent->getParam(MessageBus::EVENT_PARAM_MESSAGE_NAME);
     if (empty($messageName)) {
         return;
     }
     if (!isset($this->eventMap[$messageName])) {
         return;
     }
     $listeners = $actionEvent->getParam(EventBus::EVENT_PARAM_EVENT_LISTENERS, []);
     $listeners = array_merge($listeners, $this->eventMap[$messageName]);
     $actionEvent->setParam(EventBus::EVENT_PARAM_EVENT_LISTENERS, $listeners);
 }
Exemple #12
0
 /**
  * @param ActionEvent $actionEvent
  */
 private function onRouteEvent(ActionEvent $actionEvent)
 {
     $messageName = (string) $actionEvent->getParam(MessageBus::EVENT_PARAM_MESSAGE_NAME);
     if (empty($messageName)) {
         return;
     }
     foreach ($this->patternMap as $map) {
         list($pattern, $handler) = each($map);
         if (preg_match($pattern, $messageName)) {
             $listeners = $actionEvent->getParam(EventBus::EVENT_PARAM_EVENT_LISTENERS, []);
             $listeners[] = $handler;
             $actionEvent->setParam(EventBus::EVENT_PARAM_EVENT_LISTENERS, $listeners);
         }
     }
 }
 /**
  * @param ActionEvent $actionEvent
  */
 public function onRouteMessage(ActionEvent $actionEvent)
 {
     $messageName = (string) $actionEvent->getParam(MessageBus::EVENT_PARAM_MESSAGE_NAME);
     if (empty($messageName)) {
         return;
     }
     if (!isset($this->messageMap[$messageName])) {
         return;
     }
     $handler = $this->messageMap[$messageName];
     $actionEvent->setParam(MessageBus::EVENT_PARAM_MESSAGE_HANDLER, $handler);
 }
 /**
  * Add event metadata on event store appendToStream
  *
  * @param ActionEvent $appendToStreamEvent
  */
 public function onEventStoreAppendToStream(ActionEvent $appendToStreamEvent)
 {
     $streamEvents = $appendToStreamEvent->getParam('streamEvents');
     $streamEvents = $this->handleRecordedEvents($streamEvents);
     $appendToStreamEvent->setParam('streamEvents', $streamEvents);
 }