Completed
Push — master ( f6c83d...982358 )
by Vasily
06:50
created

ExamplePubSub::onReady()   B

Complexity

Conditions 5
Paths 1

Size

Total Lines 35
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 5
eloc 24
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 35
rs 8.439
1
<?php
2
namespace PHPDaemon\Examples;
3
4
class ExamplePubSub extends \PHPDaemon\Core\AppInstance
5
{
6
    public $sql;
7
    public $pubsub;
8
9
    /**
10
     * Called when the worker is ready to go.
11
     * @return void
12
     */
13
    public function onReady()
14
    {
15
        $appInstance = $this; // a reference to this application instance for ExampleWebSocketRoute
16
        \PHPDaemon\Servers\WebSocket\Pool::getInstance()->addRoute('ExamplePubSub',
17
            function ($client) use ($appInstance) {
18
                return new ExamplePubSubWebSocketRoute($client, $appInstance);
19
            });
20
        $this->sql = \PHPDaemon\Clients\MySQL\Pool::getInstance();
21
        $this->pubsub = new \PHPDaemon\PubSub\PubSub();
22
        $this->pubsub->addEvent('usersNum', \PHPDaemon\PubSub\PubSubEvent::init()
23
            ->onActivation(function ($pubsub) use ($appInstance) {
24
                \PHPDaemon\Core\Daemon::log('onActivation');
25
                if (isset($pubsub->event)) {
26
                    \PHPDaemon\Core\Timer::setTimeout($pubsub->event, 0);
27
                    return;
28
                }
29
                $pubsub->event = setTimeout(function ($timer) use ($pubsub, $appInstance) {
30
                    $appInstance->sql->getConnection(function ($sql) use ($pubsub) {
31
                        if (!$sql->connected) {
32
                            return;
33
                        }
34
                        $sql->query('SELECT COUNT(*) `num` FROM `dle_users`', function ($sql, $success) use ($pubsub) {
0 ignored issues
show
Unused Code introduced by
The parameter $success is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
35
                            $pubsub->pub(sizeof($sql->resultRows) ? $sql->resultRows[0]['num'] : 'null');
36
                        });
37
                    });
38
                    $timer->timeout(5e6); // 5 seconds
39
                }, 0);
40
            })
41
            ->onDeactivation(function ($pubsub) {
42
                if (isset($pubsub->event)) {
43
                    \PHPDaemon\Core\Timer::cancelTimeout($pubsub->event);
44
                }
45
            })
46
        );
47
    }
48
49
    /**
50
     * Creates Request.
51
     * @param object Request.
52
     * @param object Upstream application instance.
53
     * @return ExamplePubSubTestPageRequest Request.
54
     */
55
    public function beginRequest($req, $upstream)
56
    {
57
        return new ExamplePubSubTestPageRequest($this, $upstream, $req);
58
    }
59
}
60