package hook import ( "bytes" "time" "tunnel/pkg/server/queue" ) const bufDelay = 1 * time.Millisecond func buffering(rq, wq queue.Q) error { for b := range rq { var w bytes.Buffer t := time.NewTimer(bufDelay) stop := false for !stop { select { case x := <-rq: if len(x) == 0 { stop = true break } if w.Len() == 0 { w.Write(b) } w.Write(x) case <-t.C: stop = true } } if w.Len() > 0 { wq <- w.Bytes() } else { wq <- b } t.Stop() } return nil } func init() { registerFunc("buf", "stream buffering out/", buffering) }