如何在流拦截器中访问请求?

时间:2020-08-17 19:11:03

标签: go grpc

我有一个包含以下代码的一元拦截器:

func (m Middlewares) LocationInterceptor(c context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
    ctx := c.(HarmonyContext)
    location, ok := req.(interface{ GetLocation() *corev1.Location })
    if !ok {
        panic("location middleware used on message without a location")
    }
    
    ctx.Location := location.GetLocation()

    return handler(c, req)
}

如果我知道该流肯定只会从服务器流向客户端,该如何将其转换为流拦截器?另外,有什么方法可以让它仅在流开始的那一刻才拦截?

func (m Middlewares) LocationInterceptorStream(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
    wrappedStream := ss.(HarmonyWrappedServerStream)

    return handler(srv, wrappedStream)
}

0 个答案:

没有答案