mirror of https://github.com/veonik/squirssi
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.3 KiB
57 lines
1.3 KiB
package squirssi
|
|
|
|
import (
|
|
"code.dopame.me/veonik/squircy3/event"
|
|
"code.dopame.me/veonik/squircy3/irc"
|
|
"code.dopame.me/veonik/squircy3/plugin"
|
|
"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 {
|
|
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)
|
|
}
|
|
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()
|
|
}
|