// HandleStreamingRPC is an internal method. Do not use! func (server *Server) HandleStreamingRPC( grpcStream core.LeverRPC_HandleStreamingRPCServer) error { ctx := grpcStream.Context() err := setInternalRPCGateway(ctx) if err != nil { return err } leverURL, err := extractLeverURL(ctx) if err != nil { return err } fstMsg, err := grpcStream.Recv() if err != nil { return err } rpc := fstMsg.GetRpc() if rpc == nil { return fmt.Errorf("First message needs to have RPC field set") } if rpc.GetArgsOneof() == nil { return fmt.Errorf("RPC has no args oneof") } // Reply with an empty msg (first response message must be empty). grpcStream.Send(&core.StreamMessage{}) server.lock.RLock() entry, handlerOK := server.streamingHandlers[leverURL.Method] resourceOK := true if leverURL.Resource != "" { _, resourceOK = server.resources[leverURL.Resource] } server.lock.RUnlock() if !handlerOK { return fmt.Errorf("Method not found") } if !resourceOK { return fmt.Errorf("Resource not found") } _, err = callHandler(ctx, leverURL.Resource, entry, rpc, grpcStream) return err }