PluginProbe ʕ •ᴥ•ʔ
Kubio AI Page Builder / 2.8.6
Kubio AI Page Builder v2.8.6
2.9.0 2.8.6 2.8.5 2.8.4 2.8.3 2.8.2 2.8.1 trunk 1.0.0 1.0.1 1.1.0 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.7.3 1.8.0 1.8.1 1.8.2 1.9.0 2.0.0 2.1.1 2.1.2 2.1.3 2.2.0 2.2.3 2.2.4 2.2.5 2.3.0 2.3.1 2.3.3 2.3.4 2.4.0 2.4.1 2.4.2 2.4.3 2.4.5 2.5.0 2.5.1 2.5.2 2.5.3 2.6.0 2.6.1 2.6.2 2.6.3 2.6.5 2.6.6 2.6.7 2.7.0 2.7.1 2.7.2 2.7.3 2.8.0
kubio / vendor / symfony / var-dumper / Server / Connection.php
kubio / vendor / symfony / var-dumper / Server Last commit date
Connection.php 1 year ago DumpServer.php 1 year ago
Connection.php
100 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 namespace Symfony\Component\VarDumper\Server;
13
14 use Symfony\Component\VarDumper\Cloner\Data;
15 use Symfony\Component\VarDumper\Dumper\ContextProvider\ContextProviderInterface;
16
17 /**
18 * Forwards serialized Data clones to a server.
19 *
20 * @author Maxime Steinhausser <maxime.steinhausser@gmail.com>
21 */
22 class Connection
23 {
24 private $host;
25 private $contextProviders;
26
27 /**
28 * @var resource|null
29 */
30 private $socket;
31
32 /**
33 * @param string $host The server host
34 * @param ContextProviderInterface[] $contextProviders Context providers indexed by context name
35 */
36 public function __construct(string $host, array $contextProviders = [])
37 {
38 if (!str_contains($host, '://')) {
39 $host = 'tcp://'.$host;
40 }
41
42 $this->host = $host;
43 $this->contextProviders = $contextProviders;
44 }
45
46 public function getContextProviders(): array
47 {
48 return $this->contextProviders;
49 }
50
51 public function write(Data $data): bool
52 {
53 $socketIsFresh = !$this->socket;
54 if (!$this->socket = $this->socket ?: $this->createSocket()) {
55 return false;
56 }
57
58 $context = ['timestamp' => microtime(true)];
59 foreach ($this->contextProviders as $name => $provider) {
60 $context[$name] = $provider->getContext();
61 }
62 $context = array_filter($context);
63 $encodedPayload = base64_encode(serialize([$data, $context]))."\n";
64
65 set_error_handler([self::class, 'nullErrorHandler']);
66 try {
67 if (-1 !== stream_socket_sendto($this->socket, $encodedPayload)) {
68 return true;
69 }
70 if (!$socketIsFresh) {
71 stream_socket_shutdown($this->socket, \STREAM_SHUT_RDWR);
72 fclose($this->socket);
73 $this->socket = $this->createSocket();
74 }
75 if (-1 !== stream_socket_sendto($this->socket, $encodedPayload)) {
76 return true;
77 }
78 } finally {
79 restore_error_handler();
80 }
81
82 return false;
83 }
84
85 private static function nullErrorHandler(int $t, string $m)
86 {
87 // no-op
88 }
89
90 private function createSocket()
91 {
92 set_error_handler([self::class, 'nullErrorHandler']);
93 try {
94 return stream_socket_client($this->host, $errno, $errstr, 3);
95 } finally {
96 restore_error_handler();
97 }
98 }
99 }
100