mirror of
https://github.com/eosswedenorg/thalos
synced 2026-07-02 11:43:40 +02:00
api/client.go: in Subscribe() handle nil handler correctly.
This commit is contained in:
parent
bcd4a93c46
commit
35a9706954
1 changed files with 18 additions and 11 deletions
|
|
@ -2,6 +2,7 @@ package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"reflect"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/eosswedenorg/thalos/api/message"
|
"github.com/eosswedenorg/thalos/api/message"
|
||||||
|
|
@ -81,24 +82,30 @@ func (c *Client) hbHandler(payload []byte) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) Subscribe(channel Channel) error {
|
func (c *Client) Subscribe(channel Channel) error {
|
||||||
var handler handler
|
handlers := map[string]struct {
|
||||||
|
handler handler
|
||||||
|
callback any
|
||||||
|
}{
|
||||||
|
HeartbeatChannel.Type(): {c.hbHandler, c.OnHeartbeat},
|
||||||
|
ActionChannel{}.Channel().Type(): {c.actHandler, c.OnAction},
|
||||||
|
TableDeltaChannel{}.Channel().Type(): {c.tableDeltaHandler, c.OnTableDelta},
|
||||||
|
}
|
||||||
|
|
||||||
switch t := channel.Type(); t {
|
h, ok := handlers[channel.Type()]
|
||||||
case HeartbeatChannel.Type():
|
|
||||||
handler = c.hbHandler
|
if !ok {
|
||||||
case ActionChannel{}.Channel().Type():
|
return fmt.Errorf("invalid channel type. %s", channel.Type())
|
||||||
handler = c.actHandler
|
}
|
||||||
case TableDeltaChannel{}.Channel().Type():
|
|
||||||
handler = c.tableDeltaHandler
|
if h.callback == nil || reflect.ValueOf(h.callback).IsNil() {
|
||||||
default:
|
return fmt.Errorf("please set an handler before calling Subscribe")
|
||||||
return fmt.Errorf("invalid channel type. %s", t)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start a worker for this channel.
|
// Start a worker for this channel.
|
||||||
c.wg.Add(1)
|
c.wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer c.wg.Done()
|
defer c.wg.Done()
|
||||||
c.worker(channel, handler)
|
c.worker(channel, h.handler)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue