PHP Classes

File: vendor/ratchet/rfc6455/tests/ab/startServer.php

Recommend this page to a friend!
  Classes of Hillary Kollan   Chatto PHP Websocket Chat System   vendor/ratchet/rfc6455/tests/ab/startServer.php   Download  
File: vendor/ratchet/rfc6455/tests/ab/startServer.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Chatto PHP Websocket Chat System
Websocket based chat system using Ratchet library
Author: By
Last change:
Date: 3 years ago
Size: 1,931 bytes
 

Contents

Class file image Download
<?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();