diff options
Diffstat (limited to 'assets/php/vendor/ratchet/rfc6455/tests/ab/startServer.php')
-rw-r--r-- | assets/php/vendor/ratchet/rfc6455/tests/ab/startServer.php | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/assets/php/vendor/ratchet/rfc6455/tests/ab/startServer.php b/assets/php/vendor/ratchet/rfc6455/tests/ab/startServer.php new file mode 100644 index 0000000..b256ec2 --- /dev/null +++ b/assets/php/vendor/ratchet/rfc6455/tests/ab/startServer.php @@ -0,0 +1,55 @@ +<?php +use Ratchet\RFC6455\Messaging\MessageInterface; +use Ratchet\RFC6455\Messaging\FrameInterface; +use Ratchet\RFC6455\Messaging\Frame; + +require_once __DIR__ . "/../bootstrap.php"; + +$loop = \React\EventLoop\Factory::create(); + +$socket = new \React\Socket\Server($loop); +$server = new \React\Http\Server($socket); + +$closeFrameChecker = new \Ratchet\RFC6455\Messaging\CloseFrameChecker; +$negotiator = new \Ratchet\RFC6455\Handshake\ServerNegotiator(new \Ratchet\RFC6455\Handshake\RequestVerifier); + +$uException = new \UnderflowException; + +$server->on('request', function (\React\Http\Request $request, \React\Http\Response $response) use ($negotiator, $closeFrameChecker, $uException) { + $psrRequest = new \GuzzleHttp\Psr7\Request($request->getMethod(), $request->getPath(), $request->getHeaders()); + + $negotiatorResponse = $negotiator->handshake($psrRequest); + + $response->writeHead( + $negotiatorResponse->getStatusCode(), + array_merge( + $negotiatorResponse->getHeaders(), + ["Content-Length" => "0"] + ) + ); + + if ($negotiatorResponse->getStatusCode() !== 101) { + $response->end(); + return; + } + + $parser = new \Ratchet\RFC6455\Messaging\MessageBuffer($closeFrameChecker, function(MessageInterface $message) use ($response) { + $response->write($message->getContents()); + }, function(FrameInterface $frame) use ($response, &$parser) { + switch ($frame->getOpCode()) { + case Frame::OP_CLOSE: + $response->end($frame->getContents()); + break; + case Frame::OP_PING: + $response->write($parser->newFrame($frame->getPayload(), true, Frame::OP_PONG)->getContents()); + break; + } + }, true, function() use ($uException) { + return $uException; + }); + + $request->on('data', [$parser, 'onData']); +}); + +$socket->listen(9001, '0.0.0.0'); +$loop->run(); |