squirssi/plugin.go

57 lines
1.3 KiB
Go
Raw Permalink Normal View History

package squirssi
import (
"code.dopame.me/veonik/squircy3/event"
"code.dopame.me/veonik/squircy3/irc"
"code.dopame.me/veonik/squircy3/plugin"
2021-07-08 03:10:04 +00:00
"code.dopame.me/veonik/squircy3/vm"
"github.com/pkg/errors"
)
const pluginName = "squirssi"
func FromPlugins(m *plugin.Manager) (*Server, error) {
plg, err := m.Lookup(pluginName)
if err != nil {
return nil, err
}
mplg, ok := plg.(*squirssiPlugin)
if !ok {
2020-09-22 12:01:10 +00:00
return nil, errors.Errorf("event: received unexpected plugin type %T", plg)
}
return mplg.server, nil
}
func Initialize(m *plugin.Manager) (plugin.Plugin, error) {
ev, err := event.FromPlugins(m)
if err != nil {
return nil, errors.Wrapf(err, "%s: missing required dependency (event)", pluginName)
}
ircp, err := irc.FromPlugins(m)
if err != nil {
return nil, errors.Wrapf(err, "%s: missing required dependency (irc)", pluginName)
}
2021-07-08 03:10:04 +00:00
jsvm, err := vm.FromPlugins(m)
if err != nil {
return nil, errors.Wrapf(err, "%s: missing required dependency (vm)", pluginName)
}
srv, err := NewServer(ev, ircp, jsvm)
if err != nil {
return nil, errors.Wrapf(err, "%s: failed to initialize Server", pluginName)
}
p := &squirssiPlugin{srv}
return p, nil
}
type squirssiPlugin struct {
server *Server
}
func (p *squirssiPlugin) Name() string {
return "squirssi"
}
func (p *squirssiPlugin) HandleShutdown() {
p.server.Close()
}