Files
smpp-tester/utils/reactivevalue.go
PhatPhuckDave e8b9eb934b Implement a reactive value
Not useful yet... I thought it would be but I changed my mind...
Need to think about this a lot more
2024-08-01 23:27:46 +02:00

37 lines
785 B
Go

package utils
type ReactiveValue[T any] struct {
V T
subscribers []chan *T
}
func NewReactiveValue[T any](value T) *ReactiveValue[T] {
return &ReactiveValue[T]{
V: value,
subscribers: make([]chan *T, 0),
}
}
func (rv *ReactiveValue[T]) Set(value T) {
rv.V = value
for _, subscriber := range rv.subscribers {
subscriber <- &value
}
}
func (rv *ReactiveValue[T]) Subscribe() chan *T {
subscriber := make(chan *T)
rv.subscribers = append(rv.subscribers, subscriber)
return subscriber
}
func (rv *ReactiveValue[T]) Unsubscribe(subscriber chan *T) {
for i, s := range rv.subscribers {
if s == subscriber {
rv.subscribers = append(rv.subscribers[:i], rv.subscribers[i+1:]...)
close(subscriber)
return
}
}
}