friendship ended with social-app. php is my new best friend
1<?php
2
3namespace React\Socket;
4
5use Evenement\EventEmitter;
6use React\EventLoop\Loop;
7use React\EventLoop\LoopInterface;
8use Exception;
9
10/**
11 * @deprecated 1.9.0 See `SocketServer` instead
12 * @see SocketServer
13 */
14final class Server extends EventEmitter implements ServerInterface
15{
16 private $server;
17
18 /**
19 * [Deprecated] `Server`
20 *
21 * This class exists for BC reasons only and should not be used anymore.
22 *
23 * ```php
24 * // deprecated
25 * $socket = new React\Socket\Server(0);
26 * $socket = new React\Socket\Server('127.0.0.1:8000');
27 * $socket = new React\Socket\Server('127.0.0.1:8000', null, $context);
28 * $socket = new React\Socket\Server('127.0.0.1:8000', $loop, $context);
29 *
30 * // new
31 * $socket = new React\Socket\SocketServer('127.0.0.1:0');
32 * $socket = new React\Socket\SocketServer('127.0.0.1:8000');
33 * $socket = new React\Socket\SocketServer('127.0.0.1:8000', $context);
34 * $socket = new React\Socket\SocketServer('127.0.0.1:8000', $context, $loop);
35 * ```
36 *
37 * This class takes an optional `LoopInterface|null $loop` parameter that can be used to
38 * pass the event loop instance to use for this object. You can use a `null` value
39 * here in order to use the [default loop](https://github.com/reactphp/event-loop#loop).
40 * This value SHOULD NOT be given unless you're sure you want to explicitly use a
41 * given event loop instance.
42 *
43 * For BC reasons, you can also pass the TCP socket context options as a simple
44 * array without wrapping this in another array under the `tcp` key.
45 *
46 * @param string|int $uri
47 * @param ?LoopInterface $loop
48 * @param array $context
49 * @deprecated 1.9.0 See `SocketServer` instead
50 * @see SocketServer
51 */
52 public function __construct($uri, $loop = null, array $context = array())
53 {
54 if ($loop !== null && !$loop instanceof LoopInterface) { // manual type check to support legacy PHP < 7.1
55 throw new \InvalidArgumentException('Argument #2 ($loop) expected null|React\EventLoop\LoopInterface');
56 }
57
58 $loop = $loop ?: Loop::get();
59
60 // sanitize TCP context options if not properly wrapped
61 if ($context && (!isset($context['tcp']) && !isset($context['tls']) && !isset($context['unix']))) {
62 $context = array('tcp' => $context);
63 }
64
65 // apply default options if not explicitly given
66 $context += array(
67 'tcp' => array(),
68 'tls' => array(),
69 'unix' => array()
70 );
71
72 $scheme = 'tcp';
73 $pos = \strpos($uri, '://');
74 if ($pos !== false) {
75 $scheme = \substr($uri, 0, $pos);
76 }
77
78 if ($scheme === 'unix') {
79 $server = new UnixServer($uri, $loop, $context['unix']);
80 } else {
81 $server = new TcpServer(str_replace('tls://', '', $uri), $loop, $context['tcp']);
82
83 if ($scheme === 'tls') {
84 $server = new SecureServer($server, $loop, $context['tls']);
85 }
86 }
87
88 $this->server = $server;
89
90 $that = $this;
91 $server->on('connection', function (ConnectionInterface $conn) use ($that) {
92 $that->emit('connection', array($conn));
93 });
94 $server->on('error', function (Exception $error) use ($that) {
95 $that->emit('error', array($error));
96 });
97 }
98
99 public function getAddress()
100 {
101 return $this->server->getAddress();
102 }
103
104 public function pause()
105 {
106 $this->server->pause();
107 }
108
109 public function resume()
110 {
111 $this->server->resume();
112 }
113
114 public function close()
115 {
116 $this->server->close();
117 }
118}