TransportSync   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 15
dl 0
loc 45
rs 10
c 1
b 0
f 1
wmc 5

1 Method

Rating   Name   Duplication   Size   Complexity  
A syncing() 0 36 5
1
<?php
2
/**
3
 * Transport endpoint sync
4
 * User: moyo
5
 * Date: 24/11/2017
6
 * Time: 5:21 PM
7
 */
8
9
namespace Carno\Traced\Chips;
10
11
use Carno\Config\Config;
12
use Carno\Container\DI;
13
use Carno\Net\Address;
14
use Carno\Tracing\Contracts\Protocol;
15
use Carno\Tracing\Contracts\Transport;
16
use Closure;
17
use Throwable;
18
19
trait TransportSync
20
{
21
    /**
22
     * @param Config $source
23
     * @param string $conf
24
     * @param array $schemes
25
     * @param Closure $setter
26
     * @param Closure $failure
27
     */
28
    private function syncing(
29
        Config $source,
30
        string $conf,
31
        array $schemes,
32
        Closure $setter,
33
        Closure $failure = null
34
    ) : void {
35
        $source->watching($conf, static function (string $dsn) use ($schemes, $setter, $failure) {
36
            // parsing dsn
37
            $parsed = parse_url($dsn) ?: [];
38
39
            /**
40
             * @var Transport $transfer
41
             * @var Protocol $codec
42
             */
43
44
            $transfer = $codec = null;
45
46
            if ($platform = $schemes[$parsed['scheme']] ?? null) {
47
                [$transport, $protocol] = $platform;
48
49
                $transfer = DI::object($transport);
50
                $codec = DI::object($protocol);
51
52
                try {
53
                    $transfer->connect(
54
                        new Address($parsed['host'], $parsed['port'] ?? null),
55
                        $parsed['path'] ?? null
56
                    );
57
                } catch (Throwable $e) {
58
                    $failure && $failure($e);
59
                }
60
            }
61
62
            // user setter
63
            $setter($transfer, $codec);
64
        });
65
    }
66
}
67