add
This commit is contained in:
parent
0c41f5e7d3
commit
f512f32ec1
38
client.go
38
client.go
@ -256,6 +256,23 @@ func (p *Client) AcceptTcpConn(conn *net.TCPConn) {
|
||||
SEND_PROTO, RECV_PROTO, p.key,
|
||||
p.tcpmode, p.tcpmode_buffersize, p.tcpmode_maxwin, p.tcpmode_resend_timems)
|
||||
}
|
||||
|
||||
if clientConn.fm.GetRecvBufferSize() > 0 {
|
||||
rr := clientConn.fm.GetRecvReadLineBuffer()
|
||||
|
||||
conn.SetWriteDeadline(time.Now().Add(time.Millisecond * 100))
|
||||
n, err := conn.Write(rr)
|
||||
if err != nil {
|
||||
nerr, ok := err.(net.Error)
|
||||
if !ok || !nerr.Timeout() {
|
||||
loggo.Error("Error write tcp %s %s %s", uuid, tcpsrcaddr.String(), err)
|
||||
break
|
||||
}
|
||||
}
|
||||
if n > 0 {
|
||||
clientConn.fm.SkipRecvBuffer(n)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
loggo.Info("close inactive conn %s %s", clientConn.id, clientConn.tcpaddr.String())
|
||||
@ -340,11 +357,22 @@ func (p *Client) processPacket(packet *Packet) {
|
||||
now := time.Now()
|
||||
clientConn.activeTime = now
|
||||
|
||||
_, err := p.listenConn.WriteToUDP(packet.my.Data, addr)
|
||||
if err != nil {
|
||||
loggo.Error("WriteToUDP Error read udp %s", err)
|
||||
clientConn.close = true
|
||||
return
|
||||
if p.tcpmode > 0 {
|
||||
f := &Frame{}
|
||||
err := proto.Unmarshal(packet.my.Data, f)
|
||||
if err != nil {
|
||||
loggo.Error("Unmarshal tcp Error %s", err)
|
||||
return
|
||||
}
|
||||
|
||||
clientConn.fm.OnRecvFrame(f)
|
||||
} else {
|
||||
_, err := p.listenConn.WriteToUDP(packet.my.Data, addr)
|
||||
if err != nil {
|
||||
loggo.Error("WriteToUDP Error read udp %s", err)
|
||||
clientConn.close = true
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
p.recvPacket++
|
||||
|
33
framemgr.go
33
framemgr.go
@ -51,12 +51,13 @@ func (fm *FrameMgr) Update() {
|
||||
fm.cutSendBufferToWindow()
|
||||
|
||||
fm.sendlist.Init()
|
||||
|
||||
tmpreq, tmpack, tmpackto := fm.preProcessRecvList()
|
||||
fm.processRecvList(tmpreq, tmpack, tmpackto)
|
||||
|
||||
fm.calSendList()
|
||||
|
||||
fm.combineWindowToRecvBuffer()
|
||||
|
||||
fm.calSendList()
|
||||
}
|
||||
|
||||
func (fm *FrameMgr) cutSendBufferToWindow() {
|
||||
@ -251,6 +252,34 @@ func (fm *FrameMgr) combineWindowToRecvBuffer() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
reqtmp := make(map[int]int)
|
||||
e := fm.recvwin.Front()
|
||||
id = fm.recvid
|
||||
for len(reqtmp) < fm.windowsize && e != nil {
|
||||
f := e.Value.(*Frame)
|
||||
if f.Id != (int32)(id) {
|
||||
reqtmp[id]++
|
||||
} else {
|
||||
reqtmp[id]++
|
||||
e = e.Next()
|
||||
}
|
||||
|
||||
id++
|
||||
if fm.recvid >= FRAME_MAX_ID {
|
||||
fm.recvid = 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)
|
||||
}
|
||||
|
||||
func (fm *FrameMgr) GetRecvBufferSize() int {
|
||||
|
Loading…
x
Reference in New Issue
Block a user