Conditions | 5 |
Paths | 1 |
Total Lines | 36 |
Code Lines | 14 |
Lines | 0 |
Ratio | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 1 |
1 | <?php |
||
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 | }); |
||
67 |