コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }