public function sendAndReceive($request, $future, stdClass $context)
{
$conn = $this->fetch();
$id = $this->getNextId();
if ($conn !== null) {
$this->send($request, $future, $id, $context, $conn);
} else {
if ($this->size < $this->client->maxPoolSize) {
$self = $this;
$conn = $this->create();
$self->init($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, $id, $context) {
$self->send($request, $future, $id, $context, $conn);
});
$conn->connect($this->client->host, $this->client->port);
} else {
$this->requests[] = array($request, $future, $id, $context);
}
}
}