Обновление клиента (apps, 3rdparty, install)
This commit is contained in:
+51
@@ -0,0 +1,51 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user