public async Task AddBatchAsync(IEnumerable <TemporaryExposureKey> keys) { if (keys?.Any() != true) { return; } // Batch up the keys and save into temporary files var sequence = keys; while (sequence.Any()) { var batch = sequence.Take(MaxKeysPerFile); sequence = sequence.Skip(MaxKeysPerFile); var file = new TemporaryExposureKeyBatch(); file.Key.AddRange(batch.Select(k => new TemporaryExposureKeyBatchKey { KeyData = ByteString.CopyFrom(k.KeyData), RollingStartNumber = (uint)k.RollingStartLong, RollingPeriod = (uint)(k.RollingDuration.TotalMinutes / 10.0), TransmissionRiskLevel = (int)k.TransmissionRiskLevel, })); await AddBatchAsync(file); } }
public Task AddBatchAsync(TemporaryExposureKeyBatch file) { if (file == null || file.Key == null || file.Key.Count <= 0) { return(Task.CompletedTask); } if (!Directory.Exists(cacheRoot)) { Directory.CreateDirectory(cacheRoot); } var batchFile = Path.Combine(cacheRoot, Guid.NewGuid().ToString()); using var stream = File.Create(batchFile); using var coded = new CodedOutputStream(stream); file.WriteTo(coded); Files.Add(batchFile); return(Task.CompletedTask); }