mirror of
https://github.com/Monibuca/engine.git
synced 2026-04-23 00:07:06 +08:00
24 lines
432 B
Go
24 lines
432 B
Go
package track
|
|
|
|
type Channel[T any] struct {
|
|
listeners []chan T
|
|
}
|
|
|
|
func (r *Channel[T]) CreateReader(l int) chan T {
|
|
c := make(chan T, l)
|
|
r.listeners = append(r.listeners, c)
|
|
return c
|
|
}
|
|
|
|
func (r *Channel[T]) AddListener(c chan T) {
|
|
r.listeners = append(r.listeners, c)
|
|
}
|
|
|
|
func (r *Channel[T]) Write(data T) {
|
|
for _, listener := range r.listeners {
|
|
if len(listener) == cap(listener) {
|
|
<-listener
|
|
}
|
|
listener <- data
|
|
}
|
|
} |