package networking import ( "fmt" "io" ) type AsyncWriter struct { BufSize int stream io.WriteCloser dataChan chan []byte stopFlag bool } func NewAsyncWriter(writer io.WriteCloser) *AsyncWriter { return &AsyncWriter{ BufSize: defaultBufSize, stream: writer, stopFlag: false, } } func (aw *AsyncWriter) SendChan() (chan<- []byte) { aw.dataChan = make(chan []byte) go aw.sendLoop() return aw.dataChan } func (aw *AsyncWriter) sendLoop() { for !aw.stopFlag { data, open := <- aw.dataChan if !open { aw.stopFlag = true return } _, err := aw.stream.Write(data) if err != nil { fmt.Println("ouchie") aw.stopFlag = true } } } func (aw *AsyncWriter) Close() { aw.stopFlag = true close(aw.dataChan) }