/** * @param Task $previousTask * @param MessageHandler $previousMessageHandler * @param MessageHandler $nextMessageHandler * @throws \RuntimeException * @internal param \Prooph\Link\ProcessManager\Model\Workflow\Message $lastAnswer * @return Task[] */ public function determineNextTasks(Task $previousTask, MessageHandler $previousMessageHandler, MessageHandler $nextMessageHandler) { $tasks = []; $taskMetadata = ProcessingMetadata::noData(); $lastAnswer = $previousMessageHandler->emulateAnswerMessage($previousTask); //@TODO: Implement sub process set up if (!$this->processingNodeName()->equals($nextMessageHandler->processingNodeName())) { throw new \RuntimeException("Running message handler on different nodes is not supported yet!"); } $task = $this->scheduleTaskFor($nextMessageHandler, $taskMetadata, $lastAnswer); $nextMessage = $task->emulateWorkflowMessage(); $processType = $this->determineProcessType($nextMessage, $nextMessageHandler); $previousTaskProcess = $this->getProcessOfTask($previousTask); if (is_null($previousTaskProcess)) { throw TaskProcessNotFound::of($previousTask, $this); } if (!$previousTaskProcess->type()->isLinearMessaging() || !$processType->isLinearMessaging()) { //@TODO: Implement sub process handling throw new \RuntimeException("Handling follow up tasks with a process type other than linear messaging is not supported yet!"); } $this->recordThat(TaskWasAddedToProcess::record($this->workflowId(), $previousTaskProcess, $task)); $tasks[] = $task; return $tasks; }
/** * @param MessageHandler $messageHandler */ private function syncMessageHandler(MessageHandler $messageHandler) { $additionalData = $messageHandler->additionalData(); if ($messageHandler->preferredProcessingType()) { $additionalData['preferred_type'] = $messageHandler->preferredProcessingType()->of(); } $additionalData['node_name'] = $messageHandler->processingNodeName()->toString(); $additionalData['icon'] = $messageHandler->icon(); $additionalData['icon_type'] = $messageHandler->iconType(); $additionalData['metadata'] = $messageHandler->processingMetadata()->toArray(); $additionalData['ui_metadata_riot_tag'] = $messageHandler->metadataRiotTag(); $allowedTypes = $messageHandler->supportedProcessingTypes()->areAllTypesSupported() ? MessageHandler\ProcessingTypes::SUPPORT_ALL : $messageHandler->supportedProcessingTypes()->typeList(); if ($messageHandler->isKnownInProcessingSystem()) { $this->commandBus->dispatch(ChangeConnectorConfig::ofConnector($messageHandler->processingId()->toString(), array_merge(['name' => $messageHandler->name(), 'allowed_messages' => $this->determineAllowedMessages($messageHandler), 'allowed_types' => $allowedTypes], $additionalData), $this->processingConfigLocation)); } else { $this->commandBus->dispatch(AddConnectorToConfig::fromDefinition($messageHandler->processingId()->toString(), $messageHandler->name(), $this->determineAllowedMessages($messageHandler), $allowedTypes, $this->processingConfigLocation, $additionalData)); } }