portal/protocols/registry/registry.go

41 lines
673 B
Go

package registry
import (
"context"
"go.uber.org/fx"
)
const GroupName = "protocols"
type Protocol interface {
Name() string
Init(...any) error
Start(ctx context.Context) error
Stop(ctx context.Context) error
}
type ProtocolEntry struct {
Key string
Module fx.Option
InitFunc interface{}
}
var protocolEntry []ProtocolEntry
func Register(entry ProtocolEntry) {
protocolEntry = append(protocolEntry, entry)
}
func GetRegistry() []ProtocolEntry {
return protocolEntry
}
func FindProtocolByName(name string, protocols []Protocol) Protocol {
for _, protocol := range protocols {
if protocol.Name() == name {
return protocol
}
}
return nil
}