|
|
@@ -42,7 +42,9 @@ func (w *Writer) writeInternal(mb buf.MultiBuffer) error {
|
|
|
meta.SessionStatus = SessionStatusNew
|
|
|
}
|
|
|
|
|
|
- if mb.Len() > 0 {
|
|
|
+ hasData := !mb.IsEmpty()
|
|
|
+
|
|
|
+ if hasData {
|
|
|
meta.Option.Add(OptionData)
|
|
|
}
|
|
|
|
|
|
@@ -52,7 +54,7 @@ func (w *Writer) writeInternal(mb buf.MultiBuffer) error {
|
|
|
mb2 := buf.NewMultiBuffer()
|
|
|
mb2.Append(frame)
|
|
|
|
|
|
- if mb.Len() > 0 {
|
|
|
+ if hasData {
|
|
|
frame.AppendSupplier(serial.WriteUint16(uint16(mb.Len())))
|
|
|
mb2.AppendMulti(mb)
|
|
|
}
|
|
|
@@ -61,11 +63,14 @@ func (w *Writer) writeInternal(mb buf.MultiBuffer) error {
|
|
|
|
|
|
func (w *Writer) Write(mb buf.MultiBuffer) error {
|
|
|
const chunkSize = 8 * 1024
|
|
|
- for !mb.IsEmpty() {
|
|
|
+ for {
|
|
|
slice := mb.SliceBySize(chunkSize)
|
|
|
if err := w.writeInternal(slice); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
+ if mb.IsEmpty() {
|
|
|
+ break
|
|
|
+ }
|
|
|
}
|
|
|
return nil
|
|
|
}
|