43 lines
902 B
Go
43 lines
902 B
Go
package application
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"sync"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"git.derfenix.pro/fenix/astontest/pkg/discovery"
|
|
)
|
|
|
|
type Application struct {
|
|
discoverySet discovery.DiscoverySet
|
|
log *zap.Logger
|
|
}
|
|
|
|
func NewApplication(cfg *Config, log *zap.Logger) (*Application, error) {
|
|
discoveryOpts := []discovery.Option{discovery.WithBroadcastInterval(cfg.BroadcastInterval)}
|
|
|
|
if cfg.Debug {
|
|
discoveryOpts = append(discoveryOpts, discovery.WithDebug())
|
|
}
|
|
|
|
set, err := discovery.NewDiscoverySet(log.Named("discovery"), cfg.DiscoveryPort, discoveryOpts...)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("new discovery set: %w", err)
|
|
|
|
}
|
|
|
|
return &Application{
|
|
discoverySet: set,
|
|
log: log,
|
|
}, nil
|
|
}
|
|
|
|
func (a *Application) Start(ctx context.Context, wg *sync.WaitGroup) {
|
|
wg.Add(len(a.discoverySet))
|
|
for _, discover := range a.discoverySet {
|
|
go discover.Start(ctx, wg)
|
|
}
|
|
}
|