Support handler functions for subscribers

This commit is contained in:
James Mills 2018-03-26 22:46:35 -07:00
bovenliggende ae3e69ee98
commit 278edd7e71
Geen bekende sleutel gevonden voor deze handtekening in de database
GPG sleutel-ID: AC4C014F1440EBD6
2 gewijzigde bestanden met toevoegingen van 23 en 10 verwijderingen

Bestand weergeven

@ -24,6 +24,9 @@ const (
DefaultRetryInterval = 5
)
// HandlerFunc ...
type HandlerFunc func(msg *msgbus.Message) error
// Client ...
type Client struct {
url string
@ -155,13 +158,8 @@ func (c *Client) Publish(topic, message string) error {
}
// Subscribe ...
func (c *Client) Subscribe(topic string) *Subscriber {
return &Subscriber{
client: c,
topic: topic,
errch: make(chan error),
stopch: make(chan bool),
}
func (c *Client) Subscribe(topic string, handler HandlerFunc) *Subscriber {
return NewSubscriber(c, topic, handler)
}
// Subscriber ...
@ -169,12 +167,27 @@ type Subscriber struct {
conn *websocket.Conn
client *Client
topic string
topic string
handler HandlerFunc
errch chan error
stopch chan bool
}
// NewSubscriber ...
func NewSubscriber(client *Client, topic string, handler HandlerFunc) *Subscriber {
if handler == nil {
handler = client.Handle
}
return &Subscriber{
client: client,
topic: topic,
handler: handler,
errch: make(chan error),
stopch: make(chan bool),
}
}
// Stop ...
func (s *Subscriber) Stop() {
close(s.errch)
@ -231,6 +244,6 @@ func (s *Subscriber) Reader() {
s.errch <- err
break
}
s.client.Handle(msg)
s.handler(msg)
}
}

Bestand weergeven

@ -38,7 +38,7 @@ func subscribe(client *client.Client, topic string) {
topic = defaultTopic
}
s := client.Subscribe(topic)
s := client.Subscribe(topic, nil)
go s.Run()
sigs := make(chan os.Signal, 1)