2020-09-20 14:44:22 +00:00
|
|
|
package squirssi
|
|
|
|
|
|
|
|
import (
|
|
|
|
"code.dopame.me/veonik/squircy3/event"
|
2020-09-21 02:32:29 +00:00
|
|
|
"code.dopame.me/veonik/squircy3/irc"
|
2020-09-20 14:44:22 +00:00
|
|
|
"code.dopame.me/veonik/squircy3/plugin"
|
2021-07-08 03:10:04 +00:00
|
|
|
"code.dopame.me/veonik/squircy3/vm"
|
2020-09-20 14:44:22 +00:00
|
|
|
"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)
|
2020-09-20 14:44:22 +00:00
|
|
|
}
|
|
|
|
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)
|
|
|
|
}
|
2020-09-24 05:33:01 +00:00
|
|
|
ircp, err := irc.FromPlugins(m)
|
2020-09-21 02:32:29 +00:00
|
|
|
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)
|
2020-09-20 14:44:22 +00:00
|
|
|
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"
|
|
|
|
}
|
2020-09-24 05:33:01 +00:00
|
|
|
|
|
|
|
func (p *squirssiPlugin) HandleShutdown() {
|
|
|
|
p.server.Close()
|
|
|
|
}
|