package grpc import ( "context" "fmt" "strings" "sync" "git.loafle.net/commons/logging-go" oci "git.loafle.net/overflow/central_api/golang" occeg "git.loafle.net/overflow/commons-go/config/external/grpc" "google.golang.org/grpc" ) var grpcClient oci.OverflowApiServerClient func InitPackage(config *occeg.GRPC) { if nil == config { return } conn, err := grpc.Dial(config.Address, grpc.WithInsecure()) if nil != err { logging.Logger().Panic(err) } grpcClient = oci.NewOverflowApiServerClient(conn) logging.Logger().Infof("GRPC: connected to %s", config.Address) } func StartPackage(config *occeg.GRPC) { if nil == config { return } } func StopPackage(config *occeg.GRPC) { if nil == config { return } } func DestroyPackage(config *occeg.GRPC) { if nil == config { return } } var execMtx sync.RWMutex func Exec(ctx context.Context, method string, params ...string) (string, error) { if nil == grpcClient { return "", fmt.Errorf("GRPC Client is not initialized") } var err error sm := strings.Split(method, ".") si := &oci.ServerInput{ Target: sm[0], Method: sm[1], Params: params, } execMtx.Lock() defer execMtx.Unlock() so, err := grpcClient.(oci.OverflowApiServerClient).Exec(ctx, si) if nil != err { return "", err } return so.Result, nil }