Hprose\Swoole\Socket\HalfDuplexTransporter::sendAndReceive PHP Method

sendAndReceive() public method

public sendAndReceive ( $request, $future, stdClass $context )
$context stdClass
    public function sendAndReceive($request, $future, stdClass $context)
    {
        $conn = $this->fetch();
        if ($conn !== null) {
            $this->send($request, $future, $context, $conn);
        } else {
            if ($this->size < $this->client->maxPoolSize) {
                $self = $this;
                $conn = $this->create();
                $conn->onclose = function ($conn) use($self, $future) {
                    $self->clean($conn);
                    if ($conn->errCode !== 0) {
                        $future->reject(new Exception(socket_strerror($conn->errCode)));
                    } else {
                        $future->reject(new Exception('The server is closed.'));
                    }
                };
                $conn->on('close', function ($conn) {
                    $onclose = $conn->onclose;
                    $onclose($conn);
                });
                $conn->on('error', function ($conn) use($self, $future) {
                    $self->size--;
                    $future->reject(new Exception(socket_strerror($conn->errCode)));
                });
                $conn->on('connect', function ($conn) use($self, $request, $future, $context) {
                    $self->send($request, $future, $context, $conn);
                });
                $conn->connect($this->client->host, $this->client->port);
            } else {
                $this->requests[] = array($request, $future, $context);
            }
        }
    }