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.
56 lines
1.3 KiB
56 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() |
|
}
|
|
|