DInstances   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 33
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 9
dl 0
loc 33
c 0
b 0
f 0
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A dr() 0 3 1
A preparing() 0 17 4
1
<?php
2
/**
3
 * Instances preparer
4
 * User: moyo
5
 * Date: 18/10/2017
6
 * Time: 2:45 PM
7
 */
8
9
namespace Carno\RPC\Chips;
10
11
use Carno\Container\DI;
12
use function Carno\Coroutine\all;
13
use Carno\Promise\Promised;
14
use Carno\RPC\Contracts\Server\Lifecycle;
15
use Carno\RPC\Service\Router;
16
17
trait DInstances
18
{
19
    /**
20
     * @return Router
21
     */
22
    private function dr() : Router
23
    {
24
        return $this->router;
25
    }
26
27
    /**
28
     * bind service implementer
29
     * @param Promised $started
30
     * @param Promised $stopping
31
     * @return Promised
32
     */
33
    public function preparing(Promised $started, Promised $stopping) : Promised
34
    {
35
        $starts = [];
36
37
        foreach ($this->dr()->servers() as $api) {
38
            foreach ($this->dr()->services($api) as $service => $route) {
39
                // set global instance of service
40
                DI::set($class = $route[1], $server = DI::object($class));
41
                // lifecycle hooks
42
                if ($server instanceof Lifecycle) {
43
                    $starts[] = $started->then([$server, 'started']);
44
                    $stopping->then([$server, 'stopped']);
45
                }
46
            }
47
        }
48
49
        return all(...$starts);
50
    }
51
}
52