39 lines
693 B
Go
39 lines
693 B
Go
package modules
|
|
|
|
import (
|
|
"btclock/broker"
|
|
"context"
|
|
"sync"
|
|
)
|
|
|
|
type Module interface {
|
|
Init(broker *broker.EventBroker) error
|
|
Start(ctx context.Context) error
|
|
Stop() error
|
|
ID() string
|
|
}
|
|
|
|
type ModuleRegistry struct {
|
|
modules map[string]Module
|
|
mu sync.RWMutex
|
|
}
|
|
|
|
var Registry = &ModuleRegistry{
|
|
modules: make(map[string]Module),
|
|
}
|
|
|
|
func (b *ModuleRegistry) Register(module Module) {
|
|
b.mu.Lock()
|
|
defer b.mu.Unlock()
|
|
b.modules[module.ID()] = module
|
|
}
|
|
|
|
func (b *ModuleRegistry) GetAllModules() []Module {
|
|
b.mu.RLock()
|
|
defer b.mu.RUnlock()
|
|
modules := make([]Module, 0, len(b.modules))
|
|
for _, module := range b.modules {
|
|
modules = append(modules, module)
|
|
}
|
|
return modules
|
|
}
|