45 lines
629 B
Go
45 lines
629 B
Go
package event
|
|
|
|
import (
|
|
"bufio"
|
|
"context"
|
|
"os"
|
|
)
|
|
|
|
type Stdin struct {
|
|
Val string
|
|
}
|
|
|
|
type StdinHandler struct {
|
|
*Loop
|
|
stdInChan chan Stdin
|
|
Ctx context.Context
|
|
}
|
|
|
|
func (s *StdinHandler) OnTick(_ Tick) (err error) {
|
|
select {
|
|
case stdin := <-s.stdInChan:
|
|
err = s.Fire(Stdin{stdin.Val})
|
|
default:
|
|
|
|
}
|
|
return
|
|
}
|
|
|
|
func (s *StdinHandler) ScanJob() {
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
for scanner.Scan() {
|
|
select {
|
|
case <-s.Ctx.Done():
|
|
return
|
|
default:
|
|
s.stdInChan <- Stdin{scanner.Text()}
|
|
}
|
|
}
|
|
}
|
|
func (s *StdinHandler) OnStart() (err error) {
|
|
s.stdInChan = make(chan Stdin)
|
|
go s.ScanJob()
|
|
return
|
|
}
|