new event system (again)

This commit is contained in:
adman
2026-03-26 22:19:03 +01:00
parent df0e5e354b
commit 4fd5324064
6 changed files with 192 additions and 131 deletions
+21 -32
View File
@@ -2,7 +2,6 @@ package event
import (
"bufio"
"context"
"os"
)
@@ -10,36 +9,26 @@ 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.RegisterCritical(s.OnTick)
s.stdInChan = make(chan Stdin)
go s.ScanJob()
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
}