burlesque/hub/subscription.go

54 lines
794 B
Go

package hub
type (
Subscription struct {
queues []string
result chan<- []byte
done chan struct{}
}
)
func NewSubscription(queues []string, result chan<- []byte) *Subscription {
return &Subscription{
queues: queues,
result: result,
done: make(chan struct{}),
}
}
func (s *Subscription) Need(queue string) bool {
for _, q := range s.queues {
if q == queue {
return true
}
}
return false
}
func (s *Subscription) Send(msg []byte) bool {
success := make(chan bool)
go func() {
defer func() {
if err := recover(); err != nil {
success <- false
}
}()
s.result <- msg
success <- true
}()
return <-success
}
func (s *Subscription) Done() <-chan struct{} {
return s.done
}
func (s *Subscription) Close() {
close(s.result)
close(s.done)
}