Hprose\Swoole\WebSocket\Client::connect PHP Method

connect() private method

private connect ( )
    private function connect()
    {
        $this->connecting = true;
        $connecting =& $this->connecting;
        $this->ready = new Future();
        $ready =& $this->ready;
        $futures =& $this->futures;
        $count =& $this->count;
        $requests =& $this->requests;
        $ws = new swoole_http_client($this->ip, $this->port, $this->ssl);
        $ws->on('error', function ($ws) use(&$futures, &$count) {
            $error = new Exception(socket_strerror($ws->errCode));
            foreach ($futures as $future) {
                $future->reject($error);
            }
            $futures = array();
            $count = 0;
        });
        $buffer = '';
        $self = $this;
        $ws->on('message', function ($ws, $frame) use($self, &$buffer, &$futures, &$count, &$requests, &$ready) {
            if ($frame->finish) {
                $data = $buffer . $frame->data;
                $buffer = '';
                list(, $id) = unpack('N', substr($data, 0, 4));
                if (isset($futures[$id])) {
                    $future = $futures[$id];
                    unset($futures[$id]);
                    --$count;
                    $future->resolve(substr($data, 4));
                }
                if ($count < 100 && count($requests) > 0) {
                    ++$count;
                    $request = array_pop($requests);
                    $ready->then(function () use($ws, $request, &$futures) {
                        $id = $request[0];
                        $data = pack('N', $id) . $request[1];
                        if ($ws->push($data, WEBSOCKET_OPCODE_BINARY, true) === false) {
                            if (isset($futures[$id])) {
                                $error = new Exception(socket_strerror($ws->errCode));
                                $futures[$id]->reject($error);
                            }
                        }
                    });
                }
                if ($count === 0) {
                    if (!$self->keepAlive) {
                        $ws->close();
                    }
                }
            } else {
                $buffer .= $frame->data;
            }
        });
        $ws->set(array('keep_alive' => $this->keepAlive, 'timeout' => $this->timeout / 1000));
        $ws->setHeaders($this->header);
        $this->ws = $ws;
        $this->ws->upgrade($this->path, function () use(&$connecting, &$ready) {
            $connecting = false;
            $ready->resolve(null);
        });
    }