Esempio n. 1
0
        private async Task LoadSockets(string fileName)
        {
            try
            {
                var sockets      = new List <CustomSocket>();
                var socketParser = new CsvRecordParser <CustomSocket>(new CustomSocketSerializer());
                using (var csvReader = new StreamReader(File.OpenRead(fileName)))
                {
                    foreach (var record in socketParser.ParseRecords(csvReader))
                    {
                        sockets.Add(record);
                    }
                }

                var upsertSockets  = sockets.Select(p => Client.UpsertSocketAsync(p).ResponseAsync);
                var createdSockets = await Task.WhenAll(upsertSockets);

                Console.WriteLine($"Загрузка разъемов ({createdSockets.Length}) из CSV-файла завершена успешно");
            }
            catch (Exception e)
            {
                WritePaddedTop(e.Message);
            }
        }
Esempio n. 2
0
        /// <summary>Синхронизация репозитория</summary>
        public CsvRepository <T> Sync()
        {
            // Очистка предыдущих значений записей
            _records.Clear();
            _recordsByName.Clear();

            // Читаем доступные записи из CSV файла
            using (var csvReader = new StreamReader(File.OpenRead(_options.CsvFileName)))
            {
                foreach (var record in _parser.ParseRecords(csvReader))
                {
                    var hashCode = record.GetHashCode();
                    if (_records.ContainsKey(hashCode))
                    {
                        continue;
                    }
                    _records.Add(hashCode, record);
                    _recordsByName.Add(GetRecordId(record), hashCode);
                }
            }

            // Читаем требуемые изменения WAL файла и применяем их
            using (var walReader = GetWalReader())
            {
                string line;
                while ((line = walReader.ReadLine()) != null)
                {
                    var entry = _walSerializer.Deserialize(line);
                    switch (entry.Action)
                    {
                    case CsvDbAction.Insert:
                        _records.Add(entry.HashCode, entry.Record);
                        _recordsByName.Add(GetRecordId(entry.Record), entry.HashCode);
                        break;

                    case CsvDbAction.Update:
                        _records.Remove(entry.HashCode);
                        _records.Add(entry.Record.GetHashCode(), entry.Record);
                        break;

                    case CsvDbAction.Delete:
                        _records.Remove(entry.HashCode);
                        _recordsByName.Remove(GetRecordId(entry.Record));
                        break;
                    }
                }
            }

            // Очищаем WAL файл
            using (var stream = GetWalStream())
                stream.SetLength(0);

            // Очищаем CSV файл и заполняем его новыми значениями
            FileUtils.ClearFile(_options.CsvFileName);
            using (var writer = new StreamWriter(File.OpenWrite(_options.CsvFileName)))
            {
                writer.WriteLine(string.Join(_recordSerializer.Delimiter, _parser.CsvHead));
                foreach (var record in _records.Values)
                {
                    writer.WriteLine(_recordSerializer.Serialize(record));
                }
            }

            return(this);
        }