|
|
|
@ -67,6 +67,7 @@ type KCP struct {
|
|
|
|
|
state State
|
|
|
|
|
stateBeginTime uint32
|
|
|
|
|
lastIncomingTime uint32
|
|
|
|
|
lastPayloadTime uint32
|
|
|
|
|
sendingUpdated bool
|
|
|
|
|
receivingUpdated bool
|
|
|
|
|
lastPingTime uint32
|
|
|
|
@ -325,6 +326,7 @@ func (kcp *KCP) Input(data []byte) int {
|
|
|
|
|
kcp.shrink_buf()
|
|
|
|
|
kcp.acklist.Add(seg.Number, seg.Timestamp)
|
|
|
|
|
kcp.parse_data(seg)
|
|
|
|
|
kcp.lastPayloadTime = kcp.current
|
|
|
|
|
case *ACKSegment:
|
|
|
|
|
kcp.HandleOption(seg.Opt)
|
|
|
|
|
if kcp.rmt_wnd < seg.ReceivingWindow {
|
|
|
|
@ -346,6 +348,7 @@ func (kcp *KCP) Input(data []byte) int {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
kcp.shrink_buf()
|
|
|
|
|
kcp.lastPayloadTime = kcp.current
|
|
|
|
|
case *CmdOnlySegment:
|
|
|
|
|
kcp.HandleOption(seg.Opt)
|
|
|
|
|
if seg.Cmd == SegmentCommandTerminated {
|
|
|
|
@ -377,7 +380,7 @@ func (kcp *KCP) flush() {
|
|
|
|
|
if kcp.state == StateTerminated {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if kcp.state == StateActive && _itimediff(kcp.current, kcp.lastIncomingTime) >= 30000 {
|
|
|
|
|
if kcp.state == StateActive && _itimediff(kcp.current, kcp.lastPayloadTime) >= 30000 {
|
|
|
|
|
kcp.OnClose()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|