Lines 85.71% 6 / 7
Functions and Methods 66.66% 2 / 3
Classes and Traits 0.00% 0 / 1
Name Lines Functions and Methods CRAP Classes and Traits
ExposedEntityCommandedHandler 85.71% 6 / 7 66.66% 2 / 3 4.05 0.00% 0 / 1
 __construct 100.00% 1 / 1 100.00% 1 / 1 1
 handledMessageClass 0.00% 0 / 1 0.00% 0 / 1 2
 handle 100.00% 5 / 5 100.00% 1 / 1 2
1<?php
2
3declare(strict_types=1);
4
5namespace Stewart\Runtime\Worker\Message;
6
7use Stewart\Runtime\Ipc\Message\BrokerMessage;
8use Stewart\Runtime\Ipc\Message\ExposedEntityCommanded;
9use Stewart\Runtime\Worker\Exposure\ExposedCommandSettlements;
10use Stewart\Runtime\Worker\Exposure\ExposedCommandStreams;
11use Stewart\Runtime\Worker\Exposure\ExposedHandleRegistry;
12
13/** @implements BrokerMessageHandler<ExposedEntityCommanded> */
14final readonly class ExposedEntityCommandedHandler implements BrokerMessageHandler
15{
16    public function __construct(
17        private ExposedHandleRegistry $handles,
18        private ExposedCommandStreams $commandStreams,
19        private ExposedCommandSettlements $settlements,
20    ) {}
21
22    public function handledMessageClass(): string
23    {
24        return ExposedEntityCommanded::class;
25    }
26
27    /** @param ExposedEntityCommanded $message */
28    public function handle(BrokerMessage $message): void
29    {
30        $handle = $this->handles->findHandle($message->scope, $message->key);
31
32        if ($handle === null) {
33            $this->settlements->refuseUnknownCommand($message->commandId, \sprintf('Entity %s is no longer exposed.', $message->key));
34
35            return;
36        }
37
38        $this->commandStreams->deliverCommand($message->commandId, $message->scope, $message->key, $message->command, $handle);
39    }
40}