From a1490b41db3e2607772a10b2fd7c71d9040079ff Mon Sep 17 00:00:00 2001 From: "dc.To" Date: Fri, 25 Apr 2025 17:00:06 +0800 Subject: [PATCH] init --- chain/clientchian.go | 59 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 chain/clientchian.go diff --git a/chain/clientchian.go b/chain/clientchian.go new file mode 100644 index 0000000..0a970d0 --- /dev/null +++ b/chain/clientchian.go @@ -0,0 +1,59 @@ +package chain + +import ( + "context" + "strings" + "time" + + "github.com/gogf/gf/v2/encoding/gbase64" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gcfg" + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" +) + +/** + * 超时链 + * @author dc.To + * @version 20250409 + */ +func ClientTimeoutInvokerChain(ctx context.Context, method string, req, res interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { + ctx, cancel := context.WithTimeout(ctx, 3*time.Second) + defer cancel() + return invoker(ctx, method, req, res, cc, opts...) +} + +/** + * 上下文拦截链 + * @param void + * @author dc.To + * @version 20250424 + */ +func ClientContextInvokerChain(ctx context.Context, method string, req, res interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error { + + return invoker(ctx, method, req, nil, cc, opts...) +} + +/** + * Metadata Unary Interceptor + * @author dc.To + * @version 20250418 + */ +func ClientMetadataUnaryChian(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { + md, ok := metadata.FromIncomingContext(ctx) + if ok { + for k, v := range md { + if strings.HasPrefix(k, "x-cfg-") && len(v) > 0 { + c := strings.Join(v, "") + if len(c) > 0 { + adapter, err := gcfg.NewAdapterContent(gbase64.MustDecodeToString(v[0])) + if err != nil { + g.Log("unary").Error(ctx, err) + } + g.Cfg(strings.TrimPrefix(k, "x-cfg-")).SetAdapter(adapter) + } + } + } + } + return handler(ctx, req) +}