From 1e5c432e1029601a664454388ae366ef69618d62 Mon Sep 17 00:00:00 2001 From: Christopher Speller Date: Mon, 25 Jun 2018 12:33:13 -0700 Subject: MM-10702 Moving plugins to use hashicorp go-plugin. (#8978) * Moving plugins to use hashicorp go-plugin. * Tweaks from feedback. --- plugin/client.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 plugin/client.go (limited to 'plugin/client.go') 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 +} -- cgit v1.2.3-1-g7c22