diff --git a/src/ActivityStub.php b/src/ActivityStub.php index 1872ad05..88aedc06 100644 --- a/src/ActivityStub.php +++ b/src/ActivityStub.php @@ -4,12 +4,15 @@ namespace Workflow; +use Illuminate\Support\Arr; +use Illuminate\Support\Facades\Queue; use function React\Promise\all; use React\Promise\Deferred; use React\Promise\PromiseInterface; use function React\Promise\resolve; use Throwable; use Workflow\Serializers\Y; +use ReflectionClass; final class ActivityStub { @@ -40,6 +43,26 @@ public static function make($activity, ...$arguments): PromiseInterface return resolve($result); } + $connection = Arr::get( + (new ReflectionClass($activity))->getDefaultProperties(), + 'connection' + ) ?: Queue::getDefaultDriver(); + + if ($connection === 'sync') { + $result = $activity::dispatchNow($context->index, $context->now, $context->storedWorkflow, ...$arguments); + $context->storedWorkflow->logs() + ->create([ + 'index' => $context->index, + 'now' => $context->now, + 'class' => $activity, + 'result' => Y::serialize($result), + ]); + + ++$context->index; + WorkflowStub::setContext($context); + return resolve($result); + } + $activity::dispatch($context->index, $context->now, $context->storedWorkflow, ...$arguments); ++$context->index;