1
0
Fork 0
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:
Henrik Hautakoski 2024-02-04 14:33:23 +01:00
parent bcd4a93c46
commit 35a9706954

View file

@ -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