Completed
Push — master ( 6de770...4ec7cb )
by Edwin
02:13
created

BroadcastManager::add()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 2
1
<?php
2
3
namespace EdwinLuijten\Ekko;
4
5
use EdwinLuijten\Ekko\Broadcasters\BroadcasterInterface;
6
7
class BroadcastManager
8
{
9
    /**
10
     * @var array
11
     */
12
    protected $broadcasters = [];
13
14
    /**
15
     * @var BroadcasterInterface
16
     */
17
    private $default;
18
19
    /**
20
     * BroadcastManager constructor.
21
     * @param BroadcasterInterface $default
22
     */
23
    public function __construct(BroadcasterInterface $default)
24
    {
25
        $this->default = $default;
26
    }
27
28
    /**
29
     * @param string $broadcaster
30
     * @return BroadcasterInterface
31
     */
32
    public function connection($broadcaster = null)
33
    {
34
        return $this->broadcaster($broadcaster);
35
    }
36
37
    /**
38
     * @param string $broadcaster
39
     * @return BroadcasterInterface
40
     */
41
    public function broadcaster($broadcaster = null)
42
    {
43
        return $this->broadcasters[$broadcaster] = $this->get($broadcaster);
44
    }
45
46
    /**
47
     * @param string $broadcaster
48
     * @return BroadcasterInterface
49
     */
50
    protected function get($broadcaster)
51
    {
52
        if (is_null($broadcaster)) {
53
            return $this->default;
54
        }
55
        
56
        if (!isset($this->broadcasters[$broadcaster])) {
57
            throw new \InvalidArgumentException(sprintf('Broadcaster [%s] is not defined.', $broadcaster));
58
        }
59
60
        return $this->broadcasters[$broadcaster];
61
    }
62
63
    /**
64
     * @param string $name
65
     * @param BroadcasterInterface $broadcaster
66
     */
67
    public function add($name, BroadcasterInterface $broadcaster)
68
    {
69
        $this->broadcasters[$name] = $broadcaster;
70
    }
71
72
    /**
73
     * @param $method
74
     * @param $arguments
75
     * @return mixed
76
     */
77
    public function __call($method, $arguments)
78
    {
79
        return call_user_func_array([$this->default, $method], $arguments);
80
    }
81
}
82