friendship ended with social-app. php is my new best friend
1<?php
2
3namespace React\Socket;
4
5use Evenement\EventEmitterInterface;
6
7/**
8 * The `ServerInterface` is responsible for providing an interface for accepting
9 * incoming streaming connections, such as a normal TCP/IP connection.
10 *
11 * Most higher-level components (such as a HTTP server) accept an instance
12 * implementing this interface to accept incoming streaming connections.
13 * This is usually done via dependency injection, so it's fairly simple to actually
14 * swap this implementation against any other implementation of this interface.
15 * This means that you SHOULD typehint against this interface instead of a concrete
16 * implementation of this interface.
17 *
18 * Besides defining a few methods, this interface also implements the
19 * `EventEmitterInterface` which allows you to react to certain events:
20 *
21 * connection event:
22 * The `connection` event will be emitted whenever a new connection has been
23 * established, i.e. a new client connects to this server socket:
24 *
25 * ```php
26 * $socket->on('connection', function (React\Socket\ConnectionInterface $connection) {
27 * echo 'new connection' . PHP_EOL;
28 * });
29 * ```
30 *
31 * See also the `ConnectionInterface` for more details about handling the
32 * incoming connection.
33 *
34 * error event:
35 * The `error` event will be emitted whenever there's an error accepting a new
36 * connection from a client.
37 *
38 * ```php
39 * $socket->on('error', function (Exception $e) {
40 * echo 'error: ' . $e->getMessage() . PHP_EOL;
41 * });
42 * ```
43 *
44 * Note that this is not a fatal error event, i.e. the server keeps listening for
45 * new connections even after this event.
46 *
47 * @see ConnectionInterface
48 */
49interface ServerInterface extends EventEmitterInterface
50{
51 /**
52 * Returns the full address (URI) this server is currently listening on
53 *
54 * ```php
55 * $address = $socket->getAddress();
56 * echo 'Server listening on ' . $address . PHP_EOL;
57 * ```
58 *
59 * If the address can not be determined or is unknown at this time (such as
60 * after the socket has been closed), it MAY return a `NULL` value instead.
61 *
62 * Otherwise, it will return the full address (URI) as a string value, such
63 * as `tcp://127.0.0.1:8080`, `tcp://[::1]:80` or `tls://127.0.0.1:443`.
64 * Note that individual URI components are application specific and depend
65 * on the underlying transport protocol.
66 *
67 * If this is a TCP/IP based server and you only want the local port, you may
68 * use something like this:
69 *
70 * ```php
71 * $address = $socket->getAddress();
72 * $port = parse_url($address, PHP_URL_PORT);
73 * echo 'Server listening on port ' . $port . PHP_EOL;
74 * ```
75 *
76 * @return ?string the full listening address (URI) or NULL if it is unknown (not applicable to this server socket or already closed)
77 */
78 public function getAddress();
79
80 /**
81 * Pauses accepting new incoming connections.
82 *
83 * Removes the socket resource from the EventLoop and thus stop accepting
84 * new connections. Note that the listening socket stays active and is not
85 * closed.
86 *
87 * This means that new incoming connections will stay pending in the
88 * operating system backlog until its configurable backlog is filled.
89 * Once the backlog is filled, the operating system may reject further
90 * incoming connections until the backlog is drained again by resuming
91 * to accept new connections.
92 *
93 * Once the server is paused, no futher `connection` events SHOULD
94 * be emitted.
95 *
96 * ```php
97 * $socket->pause();
98 *
99 * $socket->on('connection', assertShouldNeverCalled());
100 * ```
101 *
102 * This method is advisory-only, though generally not recommended, the
103 * server MAY continue emitting `connection` events.
104 *
105 * Unless otherwise noted, a successfully opened server SHOULD NOT start
106 * in paused state.
107 *
108 * You can continue processing events by calling `resume()` again.
109 *
110 * Note that both methods can be called any number of times, in particular
111 * calling `pause()` more than once SHOULD NOT have any effect.
112 * Similarly, calling this after `close()` is a NO-OP.
113 *
114 * @see self::resume()
115 * @return void
116 */
117 public function pause();
118
119 /**
120 * Resumes accepting new incoming connections.
121 *
122 * Re-attach the socket resource to the EventLoop after a previous `pause()`.
123 *
124 * ```php
125 * $socket->pause();
126 *
127 * Loop::addTimer(1.0, function () use ($socket) {
128 * $socket->resume();
129 * });
130 * ```
131 *
132 * Note that both methods can be called any number of times, in particular
133 * calling `resume()` without a prior `pause()` SHOULD NOT have any effect.
134 * Similarly, calling this after `close()` is a NO-OP.
135 *
136 * @see self::pause()
137 * @return void
138 */
139 public function resume();
140
141 /**
142 * Shuts down this listening socket
143 *
144 * This will stop listening for new incoming connections on this socket.
145 *
146 * Calling this method more than once on the same instance is a NO-OP.
147 *
148 * @return void
149 */
150 public function close();
151}