bsb.py 904 Bytes
from . import Streamer as BaseStreamer

# 4 byte pertama adalah raw length
# Dalam 1 request bisa saja ada 2 transaksi, bahkan
# bisa saja string transaksi yang belum lengkap


class Streamer(BaseStreamer):
    # Override Stremer.get
    def get(self, raw):
        if self.size:
            size = self.size - len(self.raw)
        else:
            raw = self.raw + raw
            if len(raw) < 4:
                self.raw = raw
                return
            size = self.size = int(raw[:4])
            self.raw = b''
            raw = raw[4:]
        self.raw += raw[:size]
        if len(self.raw) == self.size:
            raw_iso = self.raw
            self.size = 0
            self.raw = raw[size:]  # Sisa
            return raw_iso
        self.raw += raw[size:]

    # Override Stremer.set
    def set(self, raw):
        size = str(len(raw)).zfill(4)
        return size.encode() + raw