PHP WebSocket 客户端类 WebSocketClient
匿名 · 更新于 2018/3/24
摘要: PHP WebSocket 客户端类 WebSocketClient
<?php
namespace Common\Library;
// ini_set('display_errors', 1);
// error_reporting(E_ALL);
/**
Very basic websocket client.
Supporting draft hybi-10.
@author Simon Samtleben <web@lemmingzshadow.net>
@version 2011-10-18
/
class WebSocketClient
{
private $_host;
private $_port;
private $_path;
private $_origin;
private $_Socket = null;
private $_connected = false;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">public</span></span> <span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">function</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"> </span><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(239, 239, 143);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">__construct</span></span></span><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">()</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"> </span></span>{ }
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">public</span></span> <span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">function</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"> </span><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(239, 239, 143);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">__destruct</span></span></span><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">()</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">
</span></span>{
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->disconnect();
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">public</span></span> <span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">function</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"> </span><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(239, 239, 143);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">sendData</span></span></span><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">($data, $type = </span></span><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'text'</span></span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">, $masked = true)</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">
</span></span>{
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_connected === <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>)
{
trigger_error(<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">"Not connected"</span></span>, E_USER_WARNING);
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>( !is_string($data)) {
trigger_error(<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">"Not a string data was given."</span></span>, E_USER_WARNING);
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span> (strlen($data) == <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>)
{
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
}
$res = @fwrite(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_Socket, <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_hybi10Encode($data, $type, $masked));
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>($res === <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span> || $res === <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>)
{
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
}
$buffer = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">' '</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">while</span></span>($buffer !== <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">''</span></span>)
{
$buffer = fread(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_Socket, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">512</span></span>);
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span>;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">public</span></span> <span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">function</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"> </span><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(239, 239, 143);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">connect</span></span></span><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">($host, $port, $path, $origin = false)</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">
</span></span>{
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_host = $host;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_port = $port;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_path = $path;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_origin = $origin;
$key = base64_encode(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_generateRandomString(<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">16</span></span>, <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>, <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span>));
$header = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">"GET "</span></span> . $path . <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">" HTTP/1.1\r\n"</span></span>;
$header.= <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">"Host: "</span></span>.$host.<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">":"</span></span>.$port. <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">"\r\n"</span></span>;
$header.= <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">"Upgrade: websocket\r\n"</span></span>;
$header.= <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">"Connection: Upgrade\r\n"</span></span>;
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">//$header.= "Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits\r\n";</span></span>
$header.= <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">"Sec-WebSocket-Key: "</span></span> . $key . <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">"\r\n"</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>($origin !== <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>)
{
$header.= <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">"Sec-WebSocket-Origin: "</span></span> . $origin . <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">"\r\n"</span></span>;
}
$header.= <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">"Sec-WebSocket-Version: 13\r\n\r\n"</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_Socket = fsockopen($host, $port, $errno, $errstr, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">2</span></span>);
socket_set_timeout(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_Socket, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">2</span></span>, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">10000</span></span>);
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">//socket_write($this->_Socket, $header);</span></span>
$res = @fwrite(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_Socket, $header);
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>( $res === <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span> ){
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">echo</span></span> <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">"fwrite false \n"</span></span>;
}
$response = @fread(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_Socket, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">1500</span></span>);
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">//$response = socket_read($this->_Socket);</span></span>
preg_match(<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'#Sec-WebSocket-Accept:\s(.*)$#mU'</span></span>, $response, $matches);
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span> ($matches) {
$keyAccept = trim($matches[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">1</span></span>]);
$expectedResonse = base64_encode(pack(<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'H*'</span></span>, sha1($key . <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'258EAFA5-E914-47DA-95CA-C5AB0DC85B11'</span></span>)));
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_connected = ($keyAccept === $expectedResonse) ? <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span> : <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_connected;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">public</span></span> <span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">function</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"> </span><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(239, 239, 143);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">checkConnection</span></span></span><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">()</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">
</span></span>{
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_connected = <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// send ping:</span></span>
$data = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'ping?'</span></span>;
@fwrite(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_Socket, <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_hybi10Encode($data, <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'ping'</span></span>, <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span>));
$response = @fread(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_Socket, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">300</span></span>);
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">empty</span></span>($response))
{
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
}
$response = <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_hybi10Decode($response);
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>(!is_array($response))
{
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>(!<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">isset</span></span>($response[<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'type'</span></span>]) || $response[<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'type'</span></span>] !== <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'pong'</span></span>)
{
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_connected = <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span>;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">public</span></span> <span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">function</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"> </span><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(239, 239, 143);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">disconnect</span></span></span><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">()</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">
</span></span>{
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_connected = <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
is_resource(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_Socket) <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">and</span></span> fclose(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_Socket);
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">public</span></span> <span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">function</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"> </span><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(239, 239, 143);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">reconnect</span></span></span><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">()</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">
</span></span>{
sleep(<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">10</span></span>);
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_connected = <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
fclose(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_Socket);
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->connect(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_host, <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_port, <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_path, <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->_origin);
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">private</span></span> <span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">function</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"> </span><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(239, 239, 143);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">_generateRandomString</span></span></span><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">($length = </span></span><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">10</span></span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">, $addSpaces = true, $addNumbers = true)</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">
</span></span>{
$characters = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"ยง$%&/()=[]{}'</span></span>;
$useChars = <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">array</span></span>();
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// select some random chars: </span></span>
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">for</span></span>($i = <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>; $i < $length; $i++)
{
$useChars[] = $characters[mt_rand(<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>, strlen($characters)<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">-1</span></span>)];
}
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// add spaces and numbers:</span></span>
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>($addSpaces === <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span>)
{
array_push($useChars, <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">' '</span></span>, <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">' '</span></span>, <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">' '</span></span>, <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">' '</span></span>, <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">' '</span></span>, <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">' '</span></span>);
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>($addNumbers === <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span>)
{
array_push($useChars, rand(<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>,<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">9</span></span>), rand(<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>,<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">9</span></span>), rand(<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>,<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">9</span></span>));
}
shuffle($useChars);
$randomString = trim(implode(<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">''</span></span>, $useChars));
$randomString = substr($randomString, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>, $length);
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> $randomString;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">private</span></span> <span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">function</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"> </span><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(239, 239, 143);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">_hybi10Encode</span></span></span><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">($payload, $type = </span></span><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'text'</span></span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">, $masked = true)</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">
</span></span>{
$frameHead = <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">array</span></span>();
$frame = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">''</span></span>;
$payloadLength = strlen($payload);
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">switch</span></span>($type)
{
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">case</span></span> <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'text'</span></span>:
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// first byte indicates FIN, Text-Frame (10000001):</span></span>
$frameHead[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>] = <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">129</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">break</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">case</span></span> <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'close'</span></span>:
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// first byte indicates FIN, Close Frame(10001000):</span></span>
$frameHead[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>] = <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">136</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">break</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">case</span></span> <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'ping'</span></span>:
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// first byte indicates FIN, Ping frame (10001001):</span></span>
$frameHead[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>] = <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">137</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">break</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">case</span></span> <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'pong'</span></span>:
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// first byte indicates FIN, Pong frame (10001010):</span></span>
$frameHead[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>] = <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">138</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">break</span></span>;
}
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// set mask and payload length (using 1, 3 or 9 bytes) </span></span>
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>($payloadLength > <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">65535</span></span>)
{
$payloadLengthBin = str_split(sprintf(<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'%064b'</span></span>, $payloadLength), <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">8</span></span>);
$frameHead[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">1</span></span>] = ($masked === <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span>) ? <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">255</span></span> : <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">127</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">for</span></span>($i = <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>; $i < <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">8</span></span>; $i++)
{
$frameHead[$i+<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">2</span></span>] = bindec($payloadLengthBin[$i]);
}
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// most significant bit MUST be 0 (close connection if frame too big)</span></span>
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>($frameHead[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">2</span></span>] > <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">127</span></span>)
{
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">$this</span></span>->close(<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">1004</span></span>);
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
}
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">elseif</span></span>($payloadLength > <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">125</span></span>)
{
$payloadLengthBin = str_split(sprintf(<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'%016b'</span></span>, $payloadLength), <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">8</span></span>);
$frameHead[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">1</span></span>] = ($masked === <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span>) ? <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">254</span></span> : <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">126</span></span>;
$frameHead[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">2</span></span>] = bindec($payloadLengthBin[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>]);
$frameHead[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">3</span></span>] = bindec($payloadLengthBin[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">1</span></span>]);
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">else</span></span>
{
$frameHead[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">1</span></span>] = ($masked === <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span>) ? $payloadLength + <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">128</span></span> : $payloadLength;
}
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// convert frame-head to string:</span></span>
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">foreach</span></span>(array_keys($frameHead) <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">as</span></span> $i)
{
$frameHead[$i] = chr($frameHead[$i]);
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>($masked === <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span>)
{
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// generate a random mask:</span></span>
$mask = <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">array</span></span>();
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">for</span></span>($i = <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>; $i < <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">4</span></span>; $i++)
{
$mask[$i] = chr(rand(<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">255</span></span>));
}
$frameHead = array_merge($frameHead, $mask);
}
$frame = implode(<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">''</span></span>, $frameHead);
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// append payload to frame:</span></span>
$framePayload = <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">array</span></span>();
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">for</span></span>($i = <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>; $i < $payloadLength; $i++)
{
$frame .= ($masked === <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span>) ? $payload[$i] ^ $mask[$i % <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">4</span></span>] : $payload[$i];
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> $frame;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">private</span></span> <span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">function</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"> </span><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(239, 239, 143);"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-title" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">_hybi10Decode</span></span></span><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;"><span class="hljs-params" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">($data)</span></span></span><span class="hljs-function" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">
</span></span>{
$payloadLength = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">''</span></span>;
$mask = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">''</span></span>;
$unmaskedPayload = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">''</span></span>;
$decodedData = <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">array</span></span>();
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// estimate frame type:</span></span>
$firstByteBinary = sprintf(<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'%08b'</span></span>, ord($data[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>]));
$secondByteBinary = sprintf(<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'%08b'</span></span>, ord($data[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">1</span></span>]));
$opcode = bindec(substr($firstByteBinary, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">4</span></span>, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">4</span></span>));
$isMasked = ($secondByteBinary[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>] == <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'1'</span></span>) ? <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span> : <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
$payloadLength = ord($data[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">1</span></span>]) & <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">127</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">switch</span></span>($opcode)
{
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// text frame:</span></span>
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">case</span></span> <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">1</span></span>:
$decodedData[<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'type'</span></span>] = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'text'</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">break</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">case</span></span> <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">2</span></span>:
$decodedData[<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'type'</span></span>] = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'binary'</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">break</span></span>;
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// connection close frame:</span></span>
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">case</span></span> <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">8</span></span>:
$decodedData[<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'type'</span></span>] = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'close'</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">break</span></span>;
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// ping frame:</span></span>
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">case</span></span> <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">9</span></span>:
$decodedData[<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'type'</span></span>] = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'ping'</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">break</span></span>;
<span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(127, 159, 127);"><span class="hljs-comment" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">// pong frame:</span></span>
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">case</span></span> <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">10</span></span>:
$decodedData[<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'type'</span></span>] = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'pong'</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">break</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">default</span></span>:
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">false</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">break</span></span>;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>($payloadLength === <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">126</span></span>)
{
$mask = substr($data, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">4</span></span>, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">4</span></span>);
$payloadOffset = <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">8</span></span>;
$dataLength = bindec(sprintf(<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'%08b'</span></span>, ord($data[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">2</span></span>])) . sprintf(<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'%08b'</span></span>, ord($data[<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">3</span></span>]))) + $payloadOffset;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">elseif</span></span>($payloadLength === <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">127</span></span>)
{
$mask = substr($data, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">10</span></span>, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">4</span></span>);
$payloadOffset = <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">14</span></span>;
$tmp = <span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">''</span></span>;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">for</span></span>($i = <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">0</span></span>; $i < <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">8</span></span>; $i++)
{
$tmp .= sprintf(<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'%08b'</span></span>, ord($data[$i+<span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">2</span></span>]));
}
$dataLength = bindec($tmp) + $payloadOffset;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">unset</span></span>($tmp);
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">else</span></span>
{
$mask = substr($data, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">2</span></span>, <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">4</span></span>);
$payloadOffset = <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">6</span></span>;
$dataLength = $payloadLength + $payloadOffset;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>($isMasked === <span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">true</span></span>)
{
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">for</span></span>($i = $payloadOffset; $i < $dataLength; $i++)
{
$j = $i - $payloadOffset;
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">if</span></span>(<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">isset</span></span>($data[$i]))
{
$unmaskedPayload .= $data[$i] ^ $mask[$j % <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">4</span></span>];
}
}
$decodedData[<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'payload'</span></span>] = $unmaskedPayload;
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">else</span></span>
{
$payloadOffset = $payloadOffset - <span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(140, 208, 211);"><span class="hljs-number" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">4</span></span>;
$decodedData[<span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(204, 147, 147);"><span class="hljs-string" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">'payload'</span></span>] = substr($data, $payloadOffset);
}
<span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent; color: rgb(227, 206, 171);"><span class="hljs-keyword" style="box-sizing: inherit; -webkit-tap-highlight-color: transparent;">return</span></span> $decodedData;
}
}
使用示例:
// 使用 WebSocket 通知客户端
$client = new \Common\Library\WebSocketClient();
$client->connect($_SERVER['HTTP_HOST'], 943, '/');
$payload = json_encode(array(
'code' => 'xxx',
'id' => '1'
));
$rs = $client->sendData($payload);
if( $rs !== true ){
echo "sendData error...\n";
}else{
echo "ok\n";
}
