binarylang icon indicating copy to clipboard operation
binarylang copied to clipboard

How to use with async streams?

Open arkanoid87 opened this issue 2 years ago • 0 comments

I'm trying to parse incoming TCP stream from AsyncSocket. The natural way would be to pull data byte-by-byte according to parser definition, terminating the read when end of parser logic is reached.

but BitStream is defined as a Stream wrapper, with constructor from strings or file

type
  BitStream* = ref object
    stream: Stream
    buffer: uint64
    bitsLeft: int

This forces me to pull data from async socket into a string until I know I've read enough for the next parser.get pass. Another workaround is pulling one byte at time and try parsing the collected buffer, if it succeeds restart for next packet, otherwise repeat.

It would be nice if the actual async pulling could be controlled by binarylang. Is there a way to make a Stream based BitStream work with an AsyncStream, or get the expected size of a parser given its arguments?

arkanoid87 avatar Apr 30 '23 01:04 arkanoid87