portal/protocols/protocols.go

73 lines
1.5 KiB
Go
Raw Normal View History

2024-01-12 00:11:53 +00:00
package protocols
import (
"context"
"git.lumeweb.com/LumeWeb/portal/config"
"git.lumeweb.com/LumeWeb/portal/protocols/registry"
"github.com/samber/lo"
"go.uber.org/fx"
)
2024-01-16 01:10:15 +00:00
func BuildProtocols(cm *config.Manager) fx.Option {
var options []fx.Option
enabledProtocols := cm.Viper().GetStringSlice("core.protocols")
for _, entry := range registry.GetRegistry() {
if lo.Contains(enabledProtocols, entry.Key) {
options = append(options, entry.Module)
if entry.PreInitFunc != nil {
options = append(options, fx.Invoke(entry.PreInitFunc))
}
}
}
type initParams struct {
2024-02-17 08:33:55 +00:00
fx.In
Protocols []registry.Protocol `group:"protocol"`
}
options = append(options, fx.Invoke(func(params initParams) error {
for _, protocol := range params.Protocols {
err := cm.ConfigureProtocol(protocol.Name(), protocol.Config())
if err != nil {
return err
}
2024-02-27 08:43:34 +00:00
err = protocol.Init(context.Background())
if err != nil {
return err
}
}
return nil
}))
return fx.Module("protocols", fx.Options(options...))
}
2024-01-28 09:44:33 +00:00
type LifecyclesParams struct {
fx.In
Protocols []registry.Protocol `group:"protocol"`
}
func SetupLifecycles(lifecycle fx.Lifecycle, params LifecyclesParams) error {
for _, entry := range registry.GetRegistry() {
2024-01-28 09:44:33 +00:00
for _, protocol := range params.Protocols {
if protocol.Name() == entry.Key {
lifecycle.Append(fx.Hook{
OnStart: func(ctx context.Context) error {
return protocol.Start(ctx)
},
OnStop: func(ctx context.Context) error {
return protocol.Stop(ctx)
},
})
}
}
}
return nil
2024-01-12 00:11:53 +00:00
}