PubSubEvent::onActivation()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
dl 0
loc 5
rs 10
c 0
b 0
f 0
nc 1
nop 1
1
<?php
2
namespace PHPDaemon\PubSub;
3
4
/**
5
 * PubSubEvent
6
 * @package PHPDaemon\PubSub
7
 * @author  Vasily Zorin <[email protected]>
8
 */
9
class PubSubEvent extends \SplObjectStorage
10
{
11
    use \PHPDaemon\Traits\ClassWatchdog;
12
    use \PHPDaemon\Traits\StaticObjectWatchdog;
13
14
    /**
15
     * @var array Subscriptions
16
     */
17
    public $sub = [];
18
19
    /**
20
     * @var callable Activation callback
21
     */
22
    public $actCb;
23
24
    /**
25
     * @var callable Deactivation callback
26
     */
27
    public $deactCb;
28
29
    protected $storage;
30
31
    /**
32
     * Constructor
33
     */
34
    public function __construct($act = null, $deact = null)
35
    {
36
        if ($act !== null) {
37
            $this->actCb = $act;
38
        }
39
        if ($deact !== null) {
40
            $this->deactCb = $deact;
41
        }
42
        $this->storage = new \SplObjectStorage;
43
    }
44
45
    /**
46
     * Init
47
     * @return object
48
     */
49
    public static function init()
50
    {
51
        return new static;
52
    }
53
54
    /**
55
     * Sets onActivation callback
56
     * @param  callable $cb Callback
57
     * @return this
0 ignored issues
show
Documentation introduced by
Should the return type not be PubSubEvent?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
58
     */
59
    public function onActivation($cb)
60
    {
61
        $this->actCb = $cb;
62
        return $this;
63
    }
64
65
    /**
66
     * Sets onDeactivation callback
67
     * @param callable $cb Callback
68
     * @return this
0 ignored issues
show
Documentation introduced by
Should the return type not be PubSubEvent?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
69
     */
70
    public function onDeactivation($cb)
71
    {
72
        $this->deactCb = $cb;
73
        return $this;
74
    }
75
76
    /**
77
     * Subscribe
78
     * @param  object $obj Subcriber object
79
     * @param  callable $cb Callback
80
     * @return this
0 ignored issues
show
Documentation introduced by
Should the return type not be PubSubEvent?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
81
     */
82
    public function sub($obj, $cb)
83
    {
84
        $act = $this->count() === 0;
85
        $this->attach($obj, $cb);
86
        if ($act) {
87
            if (($func = $this->actCb) !== null) {
88
                $func($this);
89
            }
90
        }
91
        return $this;
92
    }
93
94
    /**
95
     * Unsubscripe
96
     * @param  object $obj Subscriber object
97
     * @return this
0 ignored issues
show
Documentation introduced by
Should the return type not be PubSubEvent?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
98
     */
99
    public function unsub($obj)
100
    {
101
        $this->detach($obj);
102
        if ($this->count() === 0) {
103
            if (($func = $this->deactCb) !== null) {
104
                $func($this);
105
            }
106
        }
107
        return $this;
108
    }
109
110
    /**
111
     * Publish
112
     * @param  mixed $data Data
113
     * @return this
0 ignored issues
show
Documentation introduced by
Should the return type not be PubSubEvent?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
114
     */
115
    public function pub($data)
116
    {
117
        foreach ($this as $obj) {
118
            $func = $this->getInfo();
119
            $func($data);
120
        }
121
        return $this;
122
    }
123
}
124