diff options
Diffstat (limited to 'plugin/client.go')
-rw-r--r-- | plugin/client.go | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/plugin/client.go b/plugin/client.go index 3f6fbc7a6..457a16cf4 100644 --- a/plugin/client.go +++ b/plugin/client.go @@ -7,8 +7,9 @@ import ( "github.com/hashicorp/go-plugin" ) -// Starts the serving of a Mattermost plugin over rpc or gRPC -// Call this when your plugin is ready to start +// Starts the serving of a Mattermost plugin over net/rpc. gRPC is not yet supported. +// +// Call this when your plugin is ready to start. func ClientMain(pluginImplementation interface{}) { if impl, ok := pluginImplementation.(interface { SetAPI(api API) @@ -21,28 +22,39 @@ func ClientMain(pluginImplementation interface{}) { } pluginMap := map[string]plugin.Plugin{ - "hooks": &HooksPlugin{hooks: pluginImplementation}, + "hooks": &hooksPlugin{hooks: pluginImplementation}, } plugin.Serve(&plugin.ServeConfig{ - HandshakeConfig: Handshake, + HandshakeConfig: handshake, Plugins: pluginMap, }) } type MattermostPlugin struct { - API API + // API exposes the plugin api, and becomes available just prior to the OnActive hook. + API API + selfRef interface{} // This is so we can unmarshal into our parent } +// SetAPI persists the given API interface to the plugin. It is invoked just prior to the +// OnActivate hook, exposing the API for use by the plugin. func (p *MattermostPlugin) SetAPI(api API) { p.API = api } +// SetSelfRef is called by ClientMain to maintain a pointer to the plugin interface originally +// registered. This allows for the default implementation of OnConfigurationChange. func (p *MattermostPlugin) SetSelfRef(ref interface{}) { p.selfRef = ref } +// OnConfigurationChange provides a default implementation of this hook event that unmarshals the +// plugin configuration directly onto the plugin struct. +// +// Feel free to implement your own version of OnConfigurationChange if you need more advanced +// configuration handling. func (p *MattermostPlugin) OnConfigurationChange() error { if p.selfRef != nil { return p.API.LoadPluginConfiguration(p.selfRef) |