using System; using System.Collections.ObjectModel; using System.Security.Cryptography; using System.Threading; using FrostFS.SDK.Cryptography; using Google.Protobuf; using Grpc.Core.Interceptors; namespace FrostFS.SDK.Client; public class CallContext() { private ByteString? publicKeyCache; internal Action? PoolErrorHandler { get; set; } public ECDsa? Key { get; set; } public FrostFsOwner? OwnerId { get; set; } public FrostFsVersion? Version { get; set; } public CancellationToken CancellationToken { get; set; } public TimeSpan Timeout { get; set; } public DateTime? Deadline => Timeout.Ticks > 0 ? DateTime.UtcNow.Add(Timeout) : null; public Action? Callback { get; set; } public Collection Interceptors { get; } = []; public ByteString? GetPublicKeyCache() { if (publicKeyCache == null && Key != null) { publicKeyCache = ByteString.CopyFrom(Key.PublicKey()); } return publicKeyCache; } }