buffered input in kcp client

pull/876/merge
Darien Raymond 2018-02-24 23:23:10 +01:00
parent 2b4104e491
commit 1e0cad50b1
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
1 changed files with 18 additions and 8 deletions

View File

@ -19,16 +19,26 @@ var (
) )
func fetchInput(ctx context.Context, input io.Reader, reader PacketReader, conn *Connection) { func fetchInput(ctx context.Context, input io.Reader, reader PacketReader, conn *Connection) {
payload := buf.New() cache := make(chan *buf.Buffer, 1024)
defer payload.Release() go func() {
for {
for { payload := buf.New()
err := payload.Reset(buf.ReadFrom(input)) if err := payload.Reset(buf.ReadFrom(input)); err != nil {
if err != nil { payload.Release()
payload.Release() close(cache)
return return
}
select {
case cache <- payload:
default:
payload.Release()
}
} }
}()
for payload := range cache {
segments := reader.Read(payload.Bytes()) segments := reader.Read(payload.Bytes())
payload.Release()
if len(segments) > 0 { if len(segments) > 0 {
conn.Input(segments) conn.Input(segments)
} }