Files
tproxy/delayedwriter.go
2022-07-19 20:54:45 +08:00

37 lines
601 B
Go

package main
import (
"io"
"time"
)
type delayedWriter struct {
writer io.Writer
delay time.Duration
stopChan <-chan struct{}
}
func newDelayedWriter(writer io.Writer, delay time.Duration, stopChan <-chan struct{}) delayedWriter {
return delayedWriter{
writer: writer,
delay: delay,
stopChan: stopChan,
}
}
func (w delayedWriter) Write(p []byte) (int, error) {
if w.delay == 0 {
return w.writer.Write(p)
}
timer := time.NewTimer(w.delay)
defer timer.Stop()
select {
case <-timer.C:
return w.writer.Write(p)
case <-w.stopChan:
return 0, errClientCanceled
}
}