| package plugin |
| |
| import ( |
| "io" |
| "net" |
| ) |
| |
| // Protocol is an enum representing the types of protocols. |
| type Protocol string |
| |
| const ( |
| ProtocolInvalid Protocol = "" |
| ProtocolNetRPC Protocol = "netrpc" |
| ProtocolGRPC Protocol = "grpc" |
| ) |
| |
| // ServerProtocol is an interface that must be implemented for new plugin |
| // protocols to be servers. |
| type ServerProtocol interface { |
| // Init is called once to configure and initialize the protocol, but |
| // not start listening. This is the point at which all validation should |
| // be done and errors returned. |
| Init() error |
| |
| // Config is extra configuration to be outputted to stdout. This will |
| // be automatically base64 encoded to ensure it can be parsed properly. |
| // This can be an empty string if additional configuration is not needed. |
| Config() string |
| |
| // Serve is called to serve connections on the given listener. This should |
| // continue until the listener is closed. |
| Serve(net.Listener) |
| } |
| |
| // ClientProtocol is an interface that must be implemented for new plugin |
| // protocols to be clients. |
| type ClientProtocol interface { |
| io.Closer |
| |
| // Dispense dispenses a new instance of the plugin with the given name. |
| Dispense(string) (interface{}, error) |
| |
| // Ping checks that the client connection is still healthy. |
| Ping() error |
| } |