Comments (4)
We didn't include any length in the stream read operation on purpose, because it would complicate all stream implementations and will be less efficient if it didn't buffer internally, due to many small reads.
For our Http2Parser
we use a custom function, but it also uses a \Generator
based parser instead of using promises. For simply uses a wrapper class could also directly offer readInt32
and similar methods.
I think we already have such an implementation somewhere, I just don't remember where.
from byte-stream.
I created my own buffered stream implementation for MadelineProto, still gotta split it from the main project aaaa
from byte-stream.
I would like to suggest something like following:
class BinaryBuffer
{
public function __construct(InputStream $inputStream);
public function read(int $length) : string
public function unpack(array $format) : Promise<array>
}
Which is inpired by https://github.com/clue/php-socks/blob/a9cd68376de2edb97278dbefc994f679e9360248/Socks/StreamReader.php#L19-L42
And it could be used like:
$buffer = new BinaryBuffer($stream);
try {
yield $buffer->read(4); // some padding bytes
} catch (UnexpectedStreamClosedException $e) {
// stream was closed unexpectedly
} catch (NotEnoughInputException $e) {
// stream was ended before 4 bytes were received
}
try {
['length => $length, 'magic' => $magic, 'version' => $version] = yield $buffer->unpack([
'length' => 'L',
'magic' => 'C',
'version' => ['a', 16], // well, I know it's looks not well. need some better idea
]);
[$packet] = yield $buffer->unpack([
['a', $length]
]);
} catch (UnexpectedStreamClosedException|NotEnoughInputException $e) {
// the same as before
}
from byte-stream.
Related Issues (20)
- Low bandwidth v2.0.0-beta.13, v2.0.0-beta.14 HOT 10
- Consider avoiding stream_socket_shutdown HOT 3
- feof may hang HOT 16
- As soon as ResourceInputStream detects EOF, it ignores subsequent requests to read the resource HOT 15
- Broken symlink in docs HOT 2
- Immediate reads and writes might result in blocking HOT 2
- Modify chunk size on the fly HOT 5
- ResourceOutputStream interrupts writing without consumer giving information what was written/unwritten HOT 11
- Problem writing to stream HOT 6
- InputStreamChain HOT 3
- ResourceOutputStream treats open stream as closed HOT 5
- Can cause infinite loop in caller code HOT 2
- Invalid watcher issue in ResourceInputStream
- LineReader custom delimiter HOT 2
- Assertion fail: Trying to read from a previously fclose()'d resource (Windows) HOT 3
- Add InputStream::close
- Add CancellationToken to InputStream::read
- The url inside the composer.json should be in their secure version? HOT 2
- ReadableResourceStream::read() length should reattempt a read if less data is returned? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from byte-stream.