Ejemplo n.º 1
0
 protected function createSocketChannel($socket, int $chunkSize, int $length = null) : Channel
 {
     $size = (int) \max(1, \ceil(65535 / $chunkSize));
     return Channel::fromGenerator($size, function (Channel $channel) use($socket, $length, $chunkSize) {
         $reader = new SocketReader($socket);
         $remaining = $length ?? \PHP_INT_MAX;
         try {
             while ($remaining && null !== ($chunk = (yield $reader->readBuffer(\min($remaining, $chunkSize))))) {
                 $remaining -= \strlen($chunk);
                 (yield $channel->send($chunk));
             }
         } finally {
             $reader->dispose();
         }
     });
 }
Ejemplo n.º 2
0
 protected function socketReader($socket) : \Generator
 {
     $reader = new SocketReader($socket);
     $remaining = $this->length ?? \PHP_INT_MAX;
     $contents = '';
     try {
         while ($remaining && null !== ($chunk = (yield $reader->read($remaining)))) {
             $contents .= $chunk;
             $remaining -= \strlen($chunk);
         }
     } finally {
         $reader->dispose();
         if ($this->closeSource) {
             Socket::shutdown($socket);
         }
     }
     return $contents;
 }
Ejemplo n.º 3
0
 /**
  * {@inheritdoc}
  */
 public function read(int $length) : \Generator
 {
     $chunk = (yield $this->reader->readBuffer($length, true));
     $this->offset += \strlen($chunk);
     return $chunk;
 }