public function onHandShake(swoole_http_request $request, swoole_http_response $response)
{
$protocol = false;
if (isset($request->header['sec-websocket-protocol'])) {
$protocols = preg_split('~,\\s*~', $request->header['sec-websocket-protocol']);
foreach ($protocols as $protocol) {
if (isset(static::$protocolCodecs[$protocol])) {
break;
}
}
if ($protocol) {
$response->header('Sec-WebSocket-Protocol', $protocol);
}
}
if (!$protocol) {
$protocol = $this->defaultProtocol;
}
$secKey = $request->header['sec-websocket-key'];
$secAccept = base64_encode(pack('H*', sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));
foreach (["Upgrade" => "websocket", "Connection" => "Upgrade", "Sec-WebSocket-Version" => "13", "Sec-WebSocket-Accept" => $secAccept] as $k => $v) {
$response->header($k, $v);
}
$response->status(101);
$laravooleRequest = new Request($request->fd);
foreach ($request as $k => $v) {
$laravooleRequest->{$k} = $v;
}
$this->connections[$request->fd] = ['request' => $laravooleRequest, 'protocol' => static::$protocolCodecs[$protocol]];
$this->unfinished[$request->fd] = '';
return true;
}