contentplatform/registry.go

85 lines
1.7 KiB
Go

package main
import (
"fmt"
"github.com/davecgh/go-spew/spew"
)
type PluginRegistry struct {
CorePlugin map[string]CoreInterface
HandlerPlugin map[string]HandlerInterface
}
func NewPluginRegistry() *PluginRegistry {
r := new(PluginRegistry)
r.CorePlugin = make(map[string]CoreInterface)
r.HandlerPlugin = make(map[string]HandlerInterface)
return r
}
func (r *PluginRegistry) RegisterCorePlugin(plugin CoreInterface) error {
spew.Dump(plugin)
name, e := plugin.Register()
if e != nil {
return e
}
r.CorePlugin[name] = plugin
return nil
}
func (r *PluginRegistry) RegisterHandlerPlugin(plugin HandlerInterface) error {
name, e := plugin.Register()
if e != nil {
return e
}
r.HandlerPlugin[name] = plugin
return nil
}
func (r *PluginRegistry) GetCorePlugin(name string) CoreInterface {
return r.CorePlugin[name]
}
func (r *PluginRegistry) GetHandlerPlugin(name string) HandlerInterface {
return r.HandlerPlugin[name]
}
func (r *PluginRegistry) RemoveCorePlugin(name string) {
delete(r.CorePlugin, name)
}
func (r *PluginRegistry) RemoveHandlerPlugin(name string) {
delete(r.HandlerPlugin, name)
}
func (r *PluginRegistry) Run() error {
for _, v := range r.CorePlugin {
if e := v.BeforeRun(); e != nil {
return e
}
}
for _, v := range r.CorePlugin {
if e := v.Run(); e != nil {
return e
}
}
for _, v := range r.CorePlugin {
if e := v.AfterRun(); e != nil {
return e
}
}
return nil
}
func (r *PluginRegistry) Shutdown() {
fmt.Println("Registry: Shutdown")
spew.Dump(r.CorePlugin)
for k, v := range r.CorePlugin {
fmt.Println(k, v)
if e := v.UnRegister(); e != nil {
panic(e)
}
}
fmt.Println("Registry: Shutdown Done")
}