Add fabric binary transport loop

This commit is contained in:
2026-05-16 00:10:04 +03:00
parent 6ac41052e6
commit f82e6990f2
4 changed files with 208 additions and 3 deletions
@@ -79,14 +79,13 @@ func WriteFrame(w io.Writer, frame Frame) error {
}
header := make([]byte, HeaderSize)
writeHeader(header, frame, uint32(len(frame.Payload)))
if _, err := w.Write(header); err != nil {
if err := writeFull(w, header); err != nil {
return err
}
if len(frame.Payload) == 0 {
return nil
}
_, err := w.Write(frame.Payload)
return err
return writeFull(w, frame.Payload)
}
func ReadFrame(r io.Reader, maxPayload int) (Frame, error) {
@@ -201,3 +200,17 @@ func parseHeader(header []byte, maxPayload int) (Frame, int, error) {
}
return frame, payloadLength, nil
}
func writeFull(w io.Writer, data []byte) error {
for len(data) > 0 {
n, err := w.Write(data)
if err != nil {
return err
}
if n <= 0 {
return io.ErrShortWrite
}
data = data[n:]
}
return nil
}