daemon: use per-interface features

Signed-off-by: Steffen Vogel <post@steffenvogel.de>
This commit is contained in:
Steffen Vogel
2022-09-30 08:32:26 +02:00
parent 70e437d9a6
commit 92a7ad2f7f
99 changed files with 3510 additions and 2599 deletions

69
pkg/daemon/interface.go Normal file
View File

@@ -0,0 +1,69 @@
package daemon
import (
"github.com/stv0g/cunicu/pkg/config"
"github.com/stv0g/cunicu/pkg/core"
)
type Interface struct {
*core.Interface
Daemon *Daemon
Settings *config.InterfaceSettings
Features map[string]Feature
}
func (d *Daemon) NewInterface(ci *core.Interface) (*Interface, error) {
i := &Interface{
Interface: ci,
Daemon: d,
Settings: d.Config.InterfaceSettings(ci.Name()),
Features: map[string]Feature{},
}
for _, fp := range SortedFeatures() {
f, err := fp.New(i)
if err != nil {
return nil, err
} else if f == nil {
continue
}
i.Features[fp.Name] = f
}
return i, nil
}
func (i *Interface) Start() error {
for _, f := range i.Features {
if err := f.Start(); err != nil {
return err
}
}
return nil
}
func (i *Interface) Sync() error {
for _, f := range i.Features {
if s, ok := f.(SyncableFeature); ok {
if err := s.Sync(); err != nil {
return err
}
}
}
return nil
}
func (i *Interface) Close() error {
for _, feat := range i.Features {
if err := feat.Close(); err != nil {
return err
}
}
return nil
}