+++ /dev/null
-// Package shared contains shared data between the host and plugins.
-package shared
-
-import (
- "golang.org/x/net/context"
- "google.golang.org/grpc"
-
- "github.com/hashicorp/go-plugin"
- "github.com/hashicorp/go-plugin/examples/bidirectional/proto"
-)
-
-// Handshake is a common handshake that is shared by plugin and host.
-var Handshake = plugin.HandshakeConfig{
- ProtocolVersion: 1,
- MagicCookieKey: "BASIC_PLUGIN",
- MagicCookieValue: "hello",
-}
-
-// PluginMap is the map of plugins we can dispense.
-var PluginMap = map[string]plugin.Plugin{
- "counter": &CounterPlugin{},
-}
-
-type AddHelper interface {
- Sum(int64, int64) (int64, error)
-}
-
-// KV is the interface that we're exposing as a plugin.
-type Counter interface {
- Put(key string, value int64, a AddHelper) error
- Get(key string) (int64, error)
-}
-
-// This is the implementation of plugin.Plugin so we can serve/consume this.
-// We also implement GRPCPlugin so that this plugin can be served over
-// gRPC.
-type CounterPlugin struct {
- plugin.NetRPCUnsupportedPlugin
- // Concrete implementation, written in Go. This is only used for plugins
- // that are written in Go.
- Impl Counter
-}
-
-func (p *CounterPlugin) GRPCServer(broker *plugin.GRPCBroker, s *grpc.Server) error {
- proto.RegisterCounterServer(s, &GRPCServer{
- Impl: p.Impl,
- broker: broker,
- })
- return nil
-}
-
-func (p *CounterPlugin) GRPCClient(ctx context.Context, broker *plugin.GRPCBroker, c *grpc.ClientConn) (interface{}, error) {
- return &GRPCClient{
- client: proto.NewCounterClient(c),
- broker: broker,
- }, nil
-}
-
-var _ plugin.GRPCPlugin = &CounterPlugin{}