diff --git a/manager.go b/manager.go index d5eba54..d60a026 100644 --- a/manager.go +++ b/manager.go @@ -30,9 +30,30 @@ func NewManager() *Manager { } } -func (m *Manager) RunNonBlocking(ctx context.Context) error { - go m.Run(ctx) +type ComponentsAreReady struct { +} +func (m *Manager) RunNonBlocking(ctx context.Context) error { + m.initLifetime() + err := m.init(ctx) + if err != nil { + return err + } + + err = m.startBlocking(ctx) + if err != nil { + return err + } + + err = m.wait(ctx) + if err != nil { + return err + } + + err = m.shutdown(ctx) + if err != nil { + return err + } return nil } @@ -98,6 +119,14 @@ func (m *Manager) start(ctx context.Context) error { return nil } +func (m *Manager) startBlocking(ctx context.Context) error { + for _, c := range m.components { + m.startComponent(ctx, c) + } + + return nil +} + func (m *Manager) startComponent(ctx context.Context, component Component) { defer func() { err := recover()