[#792] ir: Support multiple notification endpoints

Accept notification endpoints as string slice from config. Work with the
first successfully initialized WSClient.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2021-09-15 18:57:43 +03:00 committed by Alex Vanin
parent c8ba562fe9
commit 8efea6e066

View file

@ -879,14 +879,34 @@ func New(ctx context.Context, log *zap.Logger, cfg *viper.Viper) (*Server, error
} }
func createListener(ctx context.Context, p *chainParams) (event.Listener, error) { func createListener(ctx context.Context, p *chainParams) (event.Listener, error) {
sub, err := subscriber.New(ctx, &subscriber.Params{ // config name left unchanged for compatibility, may be its better to rename it to "endpoints"
endpoints := p.cfg.GetStringSlice(p.name + ".endpoint.notification")
if len(endpoints) == 0 {
return nil, errors.New("missing morph notification endpoints")
}
var (
sub subscriber.Subscriber
err error
)
dialTimeout := p.cfg.GetDuration(p.name + ".dial_timeout")
for i := range endpoints {
sub, err = subscriber.New(ctx, &subscriber.Params{
Log: p.log, Log: p.log,
Endpoint: p.cfg.GetString(p.name + ".endpoint.notification"), Endpoint: endpoints[i],
DialTimeout: p.cfg.GetDuration(p.name + ".dial_timeout"), DialTimeout: dialTimeout,
StartFromBlock: p.from, StartFromBlock: p.from,
}) })
if err != nil { if err == nil {
return nil, err break
}
p.log.Info("failed to establish websocket neo event listener, trying another",
zap.String("endpoint", endpoints[i]),
zap.String("error", err.Error()),
)
} }
listener, err := event.NewListener(event.ListenerParams{ listener, err := event.NewListener(event.ListenerParams{