1
0
Fork 0
burlesque/hub/subscription.go

58 lines
853 B
Go
Raw Normal View History

2014-09-10 12:52:03 +00:00
package hub
type (
Subscription struct {
2014-09-11 10:27:48 +00:00
Queues []string
2014-09-24 12:52:31 +00:00
result chan Message
2014-09-10 12:52:03 +00:00
done chan struct{}
}
)
2014-09-24 12:26:05 +00:00
func NewSubscription(queues []string) *Subscription {
2014-09-10 12:52:03 +00:00
return &Subscription{
2014-09-11 10:27:48 +00:00
Queues: queues,
2014-09-24 12:52:31 +00:00
result: make(chan Message),
2014-09-10 12:52:03 +00:00
done: make(chan struct{}),
}
}
2014-09-10 13:34:39 +00:00
func (s *Subscription) Need(queue string) bool {
2014-09-11 10:27:48 +00:00
for _, q := range s.Queues {
2014-09-10 13:34:39 +00:00
if q == queue {
return true
}
}
return false
}
2014-09-24 12:52:31 +00:00
func (s *Subscription) Send(msg Message) bool {
2014-09-10 12:52:03 +00:00
success := make(chan bool)
go func() {
defer func() {
if err := recover(); err != nil {
success <- false
}
}()
2014-09-24 12:52:31 +00:00
s.result <- msg
2014-09-10 12:52:03 +00:00
success <- true
}()
return <-success
}
2014-09-24 12:52:31 +00:00
func (s *Subscription) Result() <-chan Message {
2014-09-24 12:26:05 +00:00
return s.result
}
2014-09-10 12:52:03 +00:00
func (s *Subscription) Done() <-chan struct{} {
return s.done
}
func (s *Subscription) Close() {
close(s.done)
2014-09-24 12:26:05 +00:00
close(s.result)
2014-09-10 12:52:03 +00:00
}