...
1
2
3 package reader
4
5 import (
6 "context"
7 "fmt"
8
9 "edge-infra.dev/pkg/lib/kernel/udev"
10 uevent "edge-infra.dev/pkg/lib/kernel/udev"
11 )
12
13
14
15
16
17
18
19 func StreamUEvents(ctx context.Context, decoder Decoder) (<-chan *uevent.UEvent, <-chan error) {
20 errs := make(chan error, 1)
21 uEventChan := make(chan *udev.UEvent, 1)
22
23 go func() {
24 for {
25 select {
26 case <-ctx.Done():
27 return
28 default:
29 buf := make([]byte, udev.MaxSize)
30 if err := decoder.Read(&buf); err != nil {
31 errs <- fmt.Errorf("failed to read data: %w", err)
32 continue
33 }
34
35 uevent, err := decoder.Decode(buf)
36 if err != nil {
37 errs <- fmt.Errorf("failed to decode data: %w", err)
38 continue
39 }
40 uEventChan <- uevent
41 }
42 }
43 }()
44 return uEventChan, errs
45 }
46
View as plain text