Add fabric binary transport loop
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user