package reader import ( "kf2-antiddos/internal/common" "kf2-antiddos/internal/output" "bufio" "os" ) type Reader struct { quit chan struct{} outputChan *chan common.RawEvent workerID uint } func New(workerID uint, outputChan *chan common.RawEvent) *Reader { return &Reader{ outputChan: outputChan, quit: make(chan struct{}), workerID: workerID, } } func (r *Reader) Do() { go func() { stdin := bufio.NewScanner(os.Stdin) stdin.Split(bufio.ScanLines) for { select { case <-r.quit: // check quit if there are no input return default: for lineNum := byte(1); stdin.Scan(); lineNum++ { // byte overflow it's not a bug, but a feature select { case <-r.quit: // check quit if there are input return default: } text := stdin.Text() output.Proxyln(text) *r.outputChan <- common.RawEvent{ LineNum: lineNum, Text: text, } } if err := stdin.Err(); err != nil { output.Errorln(err.Error()) } } } }() } func (r *Reader) Stop() { close(r.quit) }