using System; using System.Collections.Generic; using System.Security.Cryptography; using System.Threading; using FrostFS.SDK.ModelsV2; using FrostFS.SDK.Cryptography; using Google.Protobuf; using Grpc.Core.Interceptors; namespace FrostFS.SDK.ClientV2; public class Context() { private List? interceptors; private ByteString publicKeyCache; public ECDsa Key { get; set; } public OwnerId OwnerId { get; set; } public ModelsV2.Version Version { get; set; } public CancellationToken CancellationToken { get; set; } = default; public TimeSpan Timeout { get; set; } = default; public DateTime? Deadline => Timeout.Ticks > 0 ? DateTime.UtcNow.Add(Timeout) : null; public Action? Callback { get; set; } public List Interceptors { get { return this.interceptors ??= []; } set { this.interceptors = value; } } public ByteString PublicKeyCache { get { if (publicKeyCache == null) { publicKeyCache = ByteString.CopyFrom(Key.PublicKey()); } return publicKeyCache; } } }