OSDN Git Service

add package
[bytom/vapor.git] / vendor / github.com / hashicorp / go-plugin / examples / bidirectional / shared / interface.go
diff --git a/vendor/github.com/hashicorp/go-plugin/examples/bidirectional/shared/interface.go b/vendor/github.com/hashicorp/go-plugin/examples/bidirectional/shared/interface.go
new file mode 100644 (file)
index 0000000..f4ecb57
--- /dev/null
@@ -0,0 +1,59 @@
+// 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{}