private function init($conn)
{
$self = $this;
$conn->count = 0;
$conn->futures = array();
$conn->timeoutIds = array();
$conn->onreceive = function ($conn, $data, $id) use($self) {
if (isset($conn->futures[$id])) {
$future = $conn->futures[$id];
$self->clean($conn, $id);
if ($conn->count === 0) {
$self->recycle($conn);
}
$future->resolve($data);
}
};
$conn->on('close', function ($conn) use($self) {
$futures = $conn->futures;
if ($conn->errCode !== 0) {
$error = new Exception(socket_strerror($conn->errCode));
} else {
$error = new Exception('The server is closed.');
}
foreach ($futures as $id => $future) {
$self->clean($conn, $id);
$future->reject($error);
}
$self->size--;
});
}