/** * @param LogMessage|WorkflowMessage $message * @param WorkflowEngine $workflowEngine */ public function receiveMessage($message, WorkflowEngine $workflowEngine) { if (!$this->taskList->isStarted()) { parent::receiveMessage($message, $workflowEngine); return; } $this->assertTaskEntryExists($message->processTaskListPosition()); $taskListEntry = $this->taskList->getTaskListEntryAtPosition($message->processTaskListPosition()); if ($message instanceof WorkflowMessage) { if (!MessageNameUtils::isProcessingEvent($message->messageName())) { $this->receiveMessage(LogMessage::logWrongMessageReceivedFor($taskListEntry->task(), $taskListEntry->taskListPosition(), $message), $workflowEngine); return; } $this->recordThat(MultiPerformTaskSucceed::at($taskListEntry->taskListPosition())); } if ($message instanceof LogMessage) { $this->recordThat(LogMessageReceived::record($message)); if ($message->isError()) { $this->recordThat(MultiPerformTaskFailed::at($taskListEntry->taskListPosition())); } } $this->checkFinished($taskListEntry); }
/** * A Process can start or continue with the next step after it has received a message * * @param WorkflowMessage|LogMessage $message * @param WorkflowEngine $workflowEngine * @throws \RuntimeException * @return void */ public function receiveMessage($message, WorkflowEngine $workflowEngine) { if ($message instanceof WorkflowMessage) { if (MessageNameUtils::isProcessingCommand($message->messageName())) { $this->perform($workflowEngine, $message); return; } $this->assertTaskEntryExists($message->processTaskListPosition()); $this->recordThat(TaskEntryMarkedAsDone::at($message->processTaskListPosition())); $this->perform($workflowEngine, $message); return; } if ($message instanceof LogMessage) { $this->assertTaskEntryExists($message->processTaskListPosition()); $this->recordThat(LogMessageReceived::record($message)); if ($message->isError()) { $this->recordThat(TaskEntryMarkedAsFailed::at($message->processTaskListPosition())); } elseif ($this->isSubProcess() && $this->syncLogMessages) { //We only sync non error messages, because errors are always synced and then they would be received twice $messageForParent = $message->reconnectToProcessTask($this->parentTaskListPosition); $workflowEngine->dispatch($messageForParent); } } }