diff options
Diffstat (limited to 'plugin/client.go')
-rw-r--r-- | plugin/client.go | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/plugin/client.go b/plugin/client.go new file mode 100644 index 000000000..3f6fbc7a6 --- /dev/null +++ b/plugin/client.go @@ -0,0 +1,51 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +package plugin + +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 +func ClientMain(pluginImplementation interface{}) { + if impl, ok := pluginImplementation.(interface { + SetAPI(api API) + SetSelfRef(ref interface{}) + }); !ok { + panic("Plugin implementation given must embed plugin.MattermostPlugin") + } else { + impl.SetAPI(nil) + impl.SetSelfRef(pluginImplementation) + } + + pluginMap := map[string]plugin.Plugin{ + "hooks": &HooksPlugin{hooks: pluginImplementation}, + } + + plugin.Serve(&plugin.ServeConfig{ + HandshakeConfig: Handshake, + Plugins: pluginMap, + }) +} + +type MattermostPlugin struct { + API API + selfRef interface{} // This is so we can unmarshal into our parent +} + +func (p *MattermostPlugin) SetAPI(api API) { + p.API = api +} + +func (p *MattermostPlugin) SetSelfRef(ref interface{}) { + p.selfRef = ref +} + +func (p *MattermostPlugin) OnConfigurationChange() error { + if p.selfRef != nil { + return p.API.LoadPluginConfiguration(p.selfRef) + } + return nil +} |