Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
92.31% covered (success)
92.31%
12 / 13
87.50% covered (warning)
87.50%
7 / 8
CRAP
0.00% covered (danger)
0.00%
0 / 1
AbstractScript
92.31% covered (success)
92.31%
12 / 13
87.50% covered (warning)
87.50%
7 / 8
10.05
0.00% covered (danger)
0.00%
0 / 1
 start
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 isDone
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 result
66.67% covered (warning)
66.67%
2 / 3
0.00% covered (danger)
0.00%
0 / 1
3.33
 done
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setResult
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 failed
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 disconnected
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 success
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace AqwSocketClient\Scripts;
6
7use AqwSocketClient\Enums\ScriptResult;
8use AqwSocketClient\Interfaces\CommandInterface;
9use AqwSocketClient\Interfaces\ScriptInterface;
10use Override;
11
12/**
13 * Base implementation for atomic scripts.
14 *
15 * Provides sensible defaults so concrete scripts only override
16 * what they actually need. Subclasses signal completion by
17 * calling {@see AqwSocketClient\Scripts\AbstractScript::done()} from within {@see AqwSocketClient\Interfaces\ScriptInterface::handle()}.
18 */
19abstract class AbstractScript implements ScriptInterface
20{
21    private bool $done = false;
22    private ?ScriptResult $result = null;
23
24    #[Override]
25    public function start(ClientContext $context): ?CommandInterface
26    {
27        return null;
28    }
29
30    #[Override]
31    public function isDone(): bool
32    {
33        return $this->done;
34    }
35
36    /**
37     * Defaults to {@see AqwSocketClient\Enums\ScriptResult::Failed} when result not set.
38     */
39    #[Override]
40    public function result(): ScriptResult
41    {
42        if ($this->result === null || !$this->isDone()) {
43            return ScriptResult::Failed;
44        }
45
46        return $this->result;
47    }
48
49    /**
50     * Marks this script as completed.
51     *
52     * Should be called from within {@see AqwSocketClient\Interfaces\ScriptInterface::handle()} once the script
53     * has achieved its goal.
54     */
55    protected function done(): void
56    {
57        $this->done = true;
58    }
59
60    protected function setResult(ScriptResult $result): void
61    {
62        $this->result = $result;
63    }
64
65    #[Override]
66    public function failed(): void
67    {
68        $this->done();
69        $this->result = ScriptResult::Failed;
70    }
71
72    #[Override]
73    public function disconnected(): void
74    {
75        $this->done();
76        $this->result = ScriptResult::Disconnected;
77    }
78
79    #[Override]
80    public function success(): void
81    {
82        $this->done();
83        $this->result = ScriptResult::Success;
84    }
85}