remote-mic/networking/writer.go

48 lines
743 B
Go

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)
}