Support handler functions for subscribers
This commit is contained in:
bovenliggende
ae3e69ee98
commit
278edd7e71
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
Laden…
Verwijs in nieuw issue