35 lines
497 B
Go
35 lines
497 B
Go
package event
|
|
|
|
import (
|
|
"bufio"
|
|
"os"
|
|
)
|
|
|
|
type Stdin struct {
|
|
Val string
|
|
}
|
|
|
|
func StartListingStdin(l *Loop) {
|
|
l.RegisterEventSource(func() (chSending <-chan any) {
|
|
ch := make(chan any)
|
|
go func() {
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
ctx := l.Ctx
|
|
for scanner.Scan() {
|
|
select {
|
|
case <-ctx.Done():
|
|
return
|
|
default:
|
|
ch <- Stdin{scanner.Text()}
|
|
}
|
|
}
|
|
if err := scanner.Err(); err != nil {
|
|
ch <- err
|
|
}
|
|
}()
|
|
chSending = ch
|
|
return
|
|
}())
|
|
return
|
|
}
|