Hide result channel into subscription
This commit is contained in:
parent
a73ec0887c
commit
f29268776b
@ -3,7 +3,7 @@ package hub
|
|||||||
type (
|
type (
|
||||||
Subscription struct {
|
Subscription struct {
|
||||||
Queues []string
|
Queues []string
|
||||||
result chan<- Result
|
result chan Result
|
||||||
done chan struct{}
|
done chan struct{}
|
||||||
}
|
}
|
||||||
Result struct {
|
Result struct {
|
||||||
@ -12,10 +12,10 @@ type (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewSubscription(queues []string, result chan<- Result) *Subscription {
|
func NewSubscription(queues []string) *Subscription {
|
||||||
return &Subscription{
|
return &Subscription{
|
||||||
Queues: queues,
|
Queues: queues,
|
||||||
result: result,
|
result: make(chan Result),
|
||||||
done: make(chan struct{}),
|
done: make(chan struct{}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -47,10 +47,15 @@ func (s *Subscription) Send(res Result) bool {
|
|||||||
return <-success
|
return <-success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Subscription) Result() <-chan Result {
|
||||||
|
return s.result
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Subscription) Done() <-chan struct{} {
|
func (s *Subscription) Done() <-chan struct{} {
|
||||||
return s.done
|
return s.done
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Subscription) Close() {
|
func (s *Subscription) Close() {
|
||||||
close(s.done)
|
close(s.done)
|
||||||
|
close(s.result)
|
||||||
}
|
}
|
||||||
|
@ -75,11 +75,8 @@ func (s *Server) pubHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) subHandler(w http.ResponseWriter, r *http.Request) {
|
func (s *Server) subHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
result := make(chan hub.Result)
|
|
||||||
queues := strings.Split(r.FormValue("queues"), ",")
|
queues := strings.Split(r.FormValue("queues"), ",")
|
||||||
|
sub := hub.NewSubscription(queues)
|
||||||
sub := hub.NewSubscription(queues, result)
|
|
||||||
defer sub.Close()
|
|
||||||
|
|
||||||
finished := make(chan struct{})
|
finished := make(chan struct{})
|
||||||
defer close(finished)
|
defer close(finished)
|
||||||
@ -88,14 +85,15 @@ func (s *Server) subHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
go func() {
|
go func() {
|
||||||
select {
|
select {
|
||||||
case <-disconnected:
|
case <-disconnected:
|
||||||
sub.Close()
|
|
||||||
case <-finished:
|
case <-finished:
|
||||||
}
|
}
|
||||||
|
sub.Close()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
go s.hub.Sub(sub)
|
go s.hub.Sub(sub)
|
||||||
res := <-result
|
|
||||||
|
|
||||||
w.Header().Set("Queue", res.Queue)
|
if res, ok := <-sub.Result(); ok {
|
||||||
w.Write(res.Message)
|
w.Header().Set("Queue", res.Queue)
|
||||||
|
w.Write(res.Message)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user