From 60cb43cb2ec4f7250338c39bcb372eaef66be288 Mon Sep 17 00:00:00 2001 From: esrrhs Date: Sat, 26 Oct 2019 17:51:38 +0800 Subject: [PATCH] add --- framemgr.go | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/framemgr.go b/framemgr.go index 0ce1e58..8fab0b1 100644 --- a/framemgr.go +++ b/framemgr.go @@ -25,6 +25,7 @@ type FrameMgr struct { close bool remoteclosed bool + closesend bool } func NewFrameMgr(buffersize int, windowsize int, resend_timems int) *FrameMgr { @@ -37,7 +38,7 @@ func NewFrameMgr(buffersize int, windowsize int, resend_timems int) *FrameMgr { windowsize: windowsize, resend_timems: resend_timems, sendwin: list.New(), sendlist: list.New(), sendid: 0, recvwin: list.New(), recvlist: list.New(), recvid: 0, - close: false, remoteclosed: false} + close: false, remoteclosed: false, closesend: false} return fm } @@ -100,7 +101,7 @@ func (fm *FrameMgr) cutSendBufferToWindow() { fm.sendwin.PushBack(f) } - if fm.sendb.Empty() && fm.close { + if fm.sendb.Empty() && fm.close && !fm.closesend { f := &Frame{Type: (int32)(Frame_DATA), Resend: false, Sendtime: 0, Id: (int32)(fm.sendid), Data: make([]byte, 0)} @@ -110,6 +111,8 @@ func (fm *FrameMgr) cutSendBufferToWindow() { if fm.sendid >= FRAME_MAX_ID { fm.sendid = 0 } + + fm.closesend = true } } @@ -288,15 +291,17 @@ func (fm *FrameMgr) combineWindowToRecvBuffer() { } } - f := &Frame{Type: (int32)(Frame_REQ), Resend: false, Sendtime: 0, - Id: 0, - Dataid: make([]int32, len(reqtmp))} - index := 0 - for id, _ := range reqtmp { - f.Dataid[index] = (int32)(id) - index++ + if len(reqtmp) > 0 { + f := &Frame{Type: (int32)(Frame_REQ), Resend: false, Sendtime: 0, + Id: 0, + Dataid: make([]int32, len(reqtmp))} + index := 0 + for id, _ := range reqtmp { + f.Dataid[index] = (int32)(id) + index++ + } + fm.sendlist.PushBack(f) } - fm.sendlist.PushBack(f) } func (fm *FrameMgr) GetRecvBufferSize() int {