2022-04-25 12:24:06 -05:00

41 lines
698 B
Go

package core
import (
"github.com/hashicorp/go-plugin"
"google.golang.org/grpc"
)
type closer interface {
Closer(func() error)
}
type closes interface {
Close() error
}
func wrapInstance(p plugin.GRPCPlugin, b *plugin.GRPCBroker, c closer) (uint32, error) {
id := b.NextId()
errChan := make(chan error, 1)
go b.AcceptAndServe(id, func(opts []grpc.ServerOption) *grpc.Server {
server := plugin.DefaultGRPCServer(opts)
if err := p.GRPCServer(b, server); err != nil {
errChan <- err
return nil
}
c.Closer(func() error {
server.GracefulStop()
return nil
})
close(errChan)
return server
})
err := <-errChan
if err != nil {
return 0, err
}
return id, nil
}