123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- <?php
- /**
- * SPDX-FileCopyrightText: 2016 Robin Appelman <robin@icewind.nl>
- * SPDX-License-Identifier: MIT
- */
- namespace Icewind\Streams;
- /**
- * Wrapper that retries reads/writes to remote streams that dont deliver/recieve all requested data at once
- */
- class RetryWrapper extends Wrapper {
- public static function wrap($source) {
- return self::wrapSource($source);
- }
- public function dir_opendir($path, $options) {
- return false;
- }
- public function stream_open($path, $mode, $options, &$opened_path) {
- $this->loadContext();
- return true;
- }
- public function stream_read($count) {
- $result = parent::stream_read($count);
- $bytesReceived = strlen($result);
- while (strlen($result) > 0 && $bytesReceived < $count && !$this->stream_eof()) {
- $result .= parent::stream_read($count - $bytesReceived);
- $bytesReceived = strlen($result);
- }
- return $result;
- }
- public function stream_write($data) {
- $bytesToSend = strlen($data);
- $bytesWritten = parent::stream_write($data);
- $result = $bytesWritten;
- while ($bytesWritten > 0 && $result < $bytesToSend && !$this->stream_eof()) {
- $dataLeft = substr($data, $result);
- $bytesWritten = parent::stream_write($dataLeft);
- $result += $bytesWritten;
- }
- return $result;
- }
- }
|